diff options
Diffstat (limited to 'arch/arm/mach-s3c2442/mach-gta02.c')
-rw-r--r-- | arch/arm/mach-s3c2442/mach-gta02.c | 79 |
1 files changed, 70 insertions, 9 deletions
diff --git a/arch/arm/mach-s3c2442/mach-gta02.c b/arch/arm/mach-s3c2442/mach-gta02.c index 3e0b12ac45d..9214699ac8d 100644 --- a/arch/arm/mach-s3c2442/mach-gta02.c +++ b/arch/arm/mach-s3c2442/mach-gta02.c @@ -110,6 +110,15 @@ #include <linux/platform_battery.h> +#include <mach/ts.h> +#include <linux/input/touchscreen/ts_filter_chain.h> +#ifdef CONFIG_TOUCHSCREEN_FILTER +#include <linux/input/touchscreen/ts_filter_linear.h> +#include <linux/input/touchscreen/ts_filter_mean.h> +#include <linux/input/touchscreen/ts_filter_median.h> +#include <linux/input/touchscreen/ts_filter_group.h> +#endif + struct pcf50633 *gta02_pcf; /* @@ -202,12 +211,6 @@ static struct platform_device spigpio_device = { }, }; -static void gta02_glamo_registered(struct device *dev) -{ - spigpio_device.dev.parent = dev; - platform_device_register(&spigpio_device); -} - static struct fb_videomode gta02_glamo_modes[] = { { .name = "480x640", @@ -251,7 +254,6 @@ static struct glamo_mmc_platform_data gta02_glamo_mmc_pdata = { static struct glamo_gpio_platform_data gta02_glamo_gpio_pdata = { .base = GTA02_GPIO_GLAMO_BASE, - .registered = gta02_glamo_registered, }; static struct glamo_platform_data gta02_glamo_pdata = { @@ -555,7 +557,8 @@ struct pcf50633_platform_data gta02_pcf_pdata = { .max_uV = 3300000, .valid_modes_mask = REGULATOR_MODE_NORMAL, .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | - REGULATOR_CHANGE_STATUS, + REGULATOR_CHANGE_VOLTAGE, + .always_on = 1, }, .num_consumer_supplies = ARRAY_SIZE(hcldo_consumers), .consumer_supplies = hcldo_consumers, @@ -1010,6 +1013,51 @@ static struct platform_device gta02_pwm_leds_device = { } }; +/* Touchscreen configuration. */ + +#ifdef CONFIG_TOUCHSCREEN_FILTER +const static struct ts_filter_group_configuration gta02_ts_group = { + .length = 12, + .close_enough = 10, + .threshold = 6, /* At least half of the points in a group. */ + .attempts = 10, +}; + +const static struct ts_filter_median_configuration gta02_ts_median = { + .extent = 20, + .decimation_below = 3, + .decimation_threshold = 8 * 3, + .decimation_above = 4, +}; + +const static struct ts_filter_mean_configuration gta02_ts_mean = { + .length = 4, +}; + +const static struct ts_filter_linear_configuration gta02_ts_linear = { + .constants = {1, 0, 0, 0, 1, 0, 1}, /* Don't modify coords. */ + .coord0 = 0, + .coord1 = 1, +}; +#endif + +const static struct ts_filter_chain_configuration gta02_filter_configuration[] = +{ +#ifdef CONFIG_TOUCHSCREEN_FILTER + {&ts_filter_group_api, >a02_ts_group.config}, + {&ts_filter_median_api, >a02_ts_median.config}, + {&ts_filter_mean_api, >a02_ts_mean.config}, + {&ts_filter_linear_api, >a02_ts_linear.config}, +#endif + {NULL, NULL}, +}; + +const static struct s3c2410_ts_mach_info gta02_ts_cfg = { + .delay = 10000, + .presc = 0xff, /* slow as we can go */ + .filter_config = gta02_filter_configuration, +}; + struct hdq_platform_data gta02_hdq_platform_data = { .gpio_dir_out = gta02_hdq_gpio_direction_out, .gpio_dir_in = gta02_hdq_gpio_direction_in, @@ -1027,7 +1075,7 @@ struct platform_device gta02_hdq_device = { .resource = gta02_hdq_resources, .dev = { .platform_data = >a02_hdq_platform_data, - .parent = &s3c_device_timer[0].dev, + .parent = &s3c_device_timer[2].dev, }, }; @@ -1065,6 +1113,7 @@ static struct platform_device *gta02_devices[] __initdata = { /* These guys DO need to be children of PMU. */ static struct platform_device *gta02_devices_pmu_children[] = { + &s3c_device_ts, >a02_glamo_dev, &s3c_device_timer[2], >a02_hdq_device, @@ -1108,6 +1157,10 @@ struct gta02_device_children { void (*probed_callback)(struct device *dev); }; +static struct platform_device* gta02_glamo_gpio_children[] = { + &spigpio_device, +}; + static struct platform_device* gta02_pcf50633_gpio_children[] = { >a02_gsm_supply_device, }; @@ -1122,6 +1175,11 @@ static struct platform_device* gta02_hdq_children[] = { static struct gta02_device_children gta02_device_children[] = { { + .dev_name = "glamo-gpio.0", + .num_children = 1, + .children = gta02_glamo_gpio_children, + }, + { .dev_name = "hdq.0", .num_children = 1, .children = gta02_hdq_children, @@ -1277,6 +1335,8 @@ static void __init gta02_machine_init(void) /* Set the panic callback to make AUX LED blink at ~5Hz. */ panic_blink = gta02_panic_blink; + s3c_device_ts.name = "s3c2440-ts"; + bus_register_notifier(&platform_bus_type, >a02_device_register_notifier); bus_register_notifier(&spi_bus_type, >a02_device_register_notifier); @@ -1295,6 +1355,7 @@ static void __init gta02_machine_init(void) s3c24xx_udc_set_platdata(>a02_udc_cfg); s3c_i2c0_set_platdata(NULL); + set_s3c2410ts_info(>a02_ts_cfg); i2c_register_board_info(0, gta02_i2c_devs, ARRAY_SIZE(gta02_i2c_devs)); spi_register_board_info(gta02_spi_board_info, |