* [PATCH 1/3] Input: bu21013_ts - Request a regulator that actually exists [not found] <1354021990-16978-1-git-send-email-lee.jones@linaro.org> @ 2012-11-27 13:13 ` Lee Jones 2012-11-27 13:34 ` Mark Brown 2012-11-27 13:13 ` [PATCH 2/3] Input: bu21013_ts - Move GPIO init and exit functions into the driver Lee Jones 2012-11-27 13:13 ` [PATCH 3/3] Input: bu21013_ts - Add support for Device Tree booting Lee Jones 2 siblings, 1 reply; 13+ messages in thread From: Lee Jones @ 2012-11-27 13:13 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: Dmitry Torokhov, Lee Jones, linus.walleij, arnd, linux-input Currently the BU21013 Touch Screen driver requests a regulator by the name of 'V-TOUCH', which doesn't exist anywhere in the kernel. The correct name, as referenced in platform regulator code is 'avdd'. Here, when we request a regulator, we use the correct name instead. Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> Cc: linux-input@vger.kernel.org Acked-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Lee Jones <lee.jones@linaro.org> --- drivers/input/touchscreen/bu21013_ts.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/input/touchscreen/bu21013_ts.c b/drivers/input/touchscreen/bu21013_ts.c index 5c487d2..2fae682 100644 --- a/drivers/input/touchscreen/bu21013_ts.c +++ b/drivers/input/touchscreen/bu21013_ts.c @@ -461,7 +461,7 @@ static int __devinit bu21013_probe(struct i2c_client *client, bu21013_data->chip = pdata; bu21013_data->client = client; - bu21013_data->regulator = regulator_get(&client->dev, "V-TOUCH"); + bu21013_data->regulator = regulator_get(&client->dev, "avdd"); if (IS_ERR(bu21013_data->regulator)) { dev_err(&client->dev, "regulator_get failed\n"); error = PTR_ERR(bu21013_data->regulator); -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 1/3] Input: bu21013_ts - Request a regulator that actually exists 2012-11-27 13:13 ` [PATCH 1/3] Input: bu21013_ts - Request a regulator that actually exists Lee Jones @ 2012-11-27 13:34 ` Mark Brown 2012-11-27 14:34 ` Lee Jones 0 siblings, 1 reply; 13+ messages in thread From: Mark Brown @ 2012-11-27 13:34 UTC (permalink / raw) To: Lee Jones Cc: linux-arm-kernel, linux-kernel, Dmitry Torokhov, linus.walleij, arnd, linux-input On Tue, Nov 27, 2012 at 01:13:08PM +0000, Lee Jones wrote: > Currently the BU21013 Touch Screen driver requests a regulator by the > name of 'V-TOUCH', which doesn't exist anywhere in the kernel. The > correct name, as referenced in platform regulator code is 'avdd'. Here, > when we request a regulator, we use the correct name instead. The regulator should be requested using whatever the name for the supply in the datasheet - AVDD does sound very pluasible but it'd be good to check. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/3] Input: bu21013_ts - Request a regulator that actually exists 2012-11-27 13:34 ` Mark Brown @ 2012-11-27 14:34 ` Lee Jones 0 siblings, 0 replies; 13+ messages in thread From: Lee Jones @ 2012-11-27 14:34 UTC (permalink / raw) To: Mark Brown Cc: linux-arm-kernel, linux-kernel, Dmitry Torokhov, linus.walleij, arnd, linux-input On Tue, 27 Nov 2012, Mark Brown wrote: > On Tue, Nov 27, 2012 at 01:13:08PM +0000, Lee Jones wrote: > > Currently the BU21013 Touch Screen driver requests a regulator by the > > name of 'V-TOUCH', which doesn't exist anywhere in the kernel. The > > correct name, as referenced in platform regulator code is 'avdd'. Here, > > when we request a regulator, we use the correct name instead. > > The regulator should be requested using whatever the name for the supply > in the datasheet - AVDD does sound very pluasible but it'd be good to > check. Right. 'avdd' is correct. -- Lee Jones Linaro ST-Ericsson Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 2/3] Input: bu21013_ts - Move GPIO init and exit functions into the driver [not found] <1354021990-16978-1-git-send-email-lee.jones@linaro.org> 2012-11-27 13:13 ` [PATCH 1/3] Input: bu21013_ts - Request a regulator that actually exists Lee Jones @ 2012-11-27 13:13 ` Lee Jones 2012-11-27 13:13 ` [PATCH 3/3] Input: bu21013_ts - Add support for Device Tree booting Lee Jones 2 siblings, 0 replies; 13+ messages in thread From: Lee Jones @ 2012-11-27 13:13 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: arnd, linus.walleij, Lee Jones, linux-input, Dmitry Torokhov These GPIO init and exit functions have no place in platform data. Instead they should be part of the driver. This patch moves them to their rightful place, which subsequently elevates platform data of yet more cruft. Cc: linux-input@vger.kernel.org Acked-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Lee Jones <lee.jones@linaro.org> --- arch/arm/mach-ux500/board-mop500-stuib.c | 71 +----------------------------- drivers/input/touchscreen/bu21013_ts.c | 69 +++++++++++++++++++++-------- include/linux/input/bu21013.h | 9 +--- 3 files changed, 53 insertions(+), 96 deletions(-) diff --git a/arch/arm/mach-ux500/board-mop500-stuib.c b/arch/arm/mach-ux500/board-mop500-stuib.c index 564f57d..7e1f294 100644 --- a/arch/arm/mach-ux500/board-mop500-stuib.c +++ b/arch/arm/mach-ux500/board-mop500-stuib.c @@ -77,9 +77,6 @@ static struct i2c_board_info __initdata mop500_i2c0_devices_stuib[] = { * BU21013 ROHM touchscreen interface on the STUIBs */ -/* tracks number of bu21013 devices being enabled */ -static int bu21013_devices; - #define TOUCH_GPIO_PIN 84 #define TOUCH_XMAX 384 @@ -88,73 +85,8 @@ static int bu21013_devices; #define PRCMU_CLOCK_OCR 0x1CC #define TSC_EXT_CLOCK_9_6MHZ 0x840000 -/** - * bu21013_gpio_board_init : configures the touch panel. - * @reset_pin: reset pin number - * This function can be used to configures - * the voltage and reset the touch panel controller. - */ -static int bu21013_gpio_board_init(int reset_pin) -{ - int retval = 0; - - bu21013_devices++; - if (bu21013_devices == 1) { - retval = gpio_request(reset_pin, "touchp_reset"); - if (retval) { - printk(KERN_ERR "Unable to request gpio reset_pin"); - return retval; - } - retval = gpio_direction_output(reset_pin, 1); - if (retval < 0) { - printk(KERN_ERR "%s: gpio direction failed\n", - __func__); - return retval; - } - } - - return retval; -} - -/** - * bu21013_gpio_board_exit : deconfigures the touch panel controller - * @reset_pin: reset pin number - * This function can be used to deconfigures the chip selection - * for touch panel controller. - */ -static int bu21013_gpio_board_exit(int reset_pin) -{ - int retval = 0; - - if (bu21013_devices == 1) { - retval = gpio_direction_output(reset_pin, 0); - if (retval < 0) { - printk(KERN_ERR "%s: gpio direction failed\n", - __func__); - return retval; - } - gpio_set_value(reset_pin, 0); - } - bu21013_devices--; - - return retval; -} - -/** - * bu21013_read_pin_val : get the interrupt pin value - * This function can be used to get the interrupt pin value for touch panel - * controller. - */ -static int bu21013_read_pin_val(void) -{ - return gpio_get_value(TOUCH_GPIO_PIN); -} - static struct bu21013_platform_device tsc_plat_device = { - .cs_en = bu21013_gpio_board_init, - .cs_dis = bu21013_gpio_board_exit, - .irq_read_val = bu21013_read_pin_val, - .irq = NOMADIK_GPIO_TO_IRQ(TOUCH_GPIO_PIN), + .touch_pin = TOUCH_GPIO_PIN, .touch_x_max = TOUCH_XMAX, .touch_y_max = TOUCH_YMAX, .ext_clk = false, @@ -171,7 +103,6 @@ static struct i2c_board_info __initdata u8500_i2c3_devices_stuib[] = { I2C_BOARD_INFO("bu21013_tp", 0x5D), .platform_data = &tsc_plat_device, }, - }; void __init mop500_stuib_init(void) diff --git a/drivers/input/touchscreen/bu21013_ts.c b/drivers/input/touchscreen/bu21013_ts.c index 2fae682..8982bea 100644 --- a/drivers/input/touchscreen/bu21013_ts.c +++ b/drivers/input/touchscreen/bu21013_ts.c @@ -14,6 +14,7 @@ #include <linux/slab.h> #include <linux/regulator/consumer.h> #include <linux/module.h> +#include <linux/gpio.h> #define PEN_DOWN_INTR 0 #define MAX_FINGERS 2 @@ -148,11 +149,12 @@ struct bu21013_ts_data { struct i2c_client *client; wait_queue_head_t wait; - bool touch_stopped; const struct bu21013_platform_device *chip; struct input_dev *in_dev; - unsigned int intr_pin; struct regulator *regulator; + unsigned int irq; + unsigned int intr_pin; + bool touch_stopped; }; /** @@ -262,7 +264,7 @@ static irqreturn_t bu21013_gpio_irq(int irq, void *device_data) return IRQ_NONE; } - data->intr_pin = data->chip->irq_read_val(); + data->intr_pin = gpio_get_value(data->chip->touch_pin); if (data->intr_pin == PEN_DOWN_INTR) wait_event_timeout(data->wait, data->touch_stopped, msecs_to_jiffies(2)); @@ -418,10 +420,33 @@ static void bu21013_free_irq(struct bu21013_ts_data *bu21013_data) { bu21013_data->touch_stopped = true; wake_up(&bu21013_data->wait); - free_irq(bu21013_data->chip->irq, bu21013_data); + free_irq(bu21013_data->irq, bu21013_data); } /** + * bu21013_cs_disable() - deconfigures the touch panel controller + * @bu21013_data: device structure pointer + * + * This function is used to deconfigure the chip selection + * for touch panel controller. + */ +static void bu21013_cs_disable(struct bu21013_ts_data *bu21013_data) +{ + int error; + + error = gpio_direction_output(bu21013_data->chip->cs_pin, 0); + if (error < 0) + dev_warn(&bu21013_data->client->dev, + "%s: gpio direction failed, error: %d\n", + __func__, error); + else + gpio_set_value(bu21013_data->chip->cs_pin, 0); + + gpio_free(bu21013_data->chip->cs_pin); +} + + +/** * bu21013_probe() - initializes the i2c-client touchscreen driver * @client: i2c client structure pointer * @id: i2c device id pointer @@ -430,7 +455,7 @@ static void bu21013_free_irq(struct bu21013_ts_data *bu21013_data) * driver and returns integer. */ static int __devinit bu21013_probe(struct i2c_client *client, - const struct i2c_device_id *id) + const struct i2c_device_id *id) { struct bu21013_ts_data *bu21013_data; struct input_dev *in_dev; @@ -449,6 +474,11 @@ static int __devinit bu21013_probe(struct i2c_client *client, return -EINVAL; } + if (!gpio_is_valid(pdata->touch_pin)) { + dev_err(&client->dev, "invalid touch_pin supplied\n"); + return -EINVAL; + } + bu21013_data = kzalloc(sizeof(struct bu21013_ts_data), GFP_KERNEL); in_dev = input_allocate_device(); if (!bu21013_data || !in_dev) { @@ -460,6 +490,7 @@ static int __devinit bu21013_probe(struct i2c_client *client, bu21013_data->in_dev = in_dev; bu21013_data->chip = pdata; bu21013_data->client = client; + bu21013_data->irq = gpio_to_irq(pdata->touch_pin); bu21013_data->regulator = regulator_get(&client->dev, "avdd"); if (IS_ERR(bu21013_data->regulator)) { @@ -478,12 +509,11 @@ static int __devinit bu21013_probe(struct i2c_client *client, init_waitqueue_head(&bu21013_data->wait); /* configure the gpio pins */ - if (pdata->cs_en) { - error = pdata->cs_en(pdata->cs_pin); - if (error < 0) { - dev_err(&client->dev, "chip init failed\n"); - goto err_disable_regulator; - } + error = gpio_request_one(pdata->cs_pin, GPIOF_OUT_INIT_HIGH, + "touchp_reset"); + if (error < 0) { + dev_err(&client->dev, "Unable to request gpio reset_pin\n"); + goto err_disable_regulator; } /* configure the touch panel controller */ @@ -508,12 +538,13 @@ static int __devinit bu21013_probe(struct i2c_client *client, pdata->touch_y_max, 0, 0); input_set_drvdata(in_dev, bu21013_data); - error = request_threaded_irq(pdata->irq, NULL, bu21013_gpio_irq, + error = request_threaded_irq(bu21013_data->irq, NULL, bu21013_gpio_irq, IRQF_TRIGGER_FALLING | IRQF_SHARED | IRQF_ONESHOT, DRIVER_TP, bu21013_data); if (error) { - dev_err(&client->dev, "request irq %d failed\n", pdata->irq); + dev_err(&client->dev, "request irq %d failed\n", + bu21013_data->irq); goto err_cs_disable; } @@ -531,7 +562,7 @@ static int __devinit bu21013_probe(struct i2c_client *client, err_free_irq: bu21013_free_irq(bu21013_data); err_cs_disable: - pdata->cs_dis(pdata->cs_pin); + bu21013_cs_disable(bu21013_data); err_disable_regulator: regulator_disable(bu21013_data->regulator); err_put_regulator: @@ -555,7 +586,7 @@ static int __devexit bu21013_remove(struct i2c_client *client) bu21013_free_irq(bu21013_data); - bu21013_data->chip->cs_dis(bu21013_data->chip->cs_pin); + bu21013_cs_disable(bu21013_data); input_unregister_device(bu21013_data->in_dev); @@ -584,9 +615,9 @@ static int bu21013_suspend(struct device *dev) bu21013_data->touch_stopped = true; if (device_may_wakeup(&client->dev)) - enable_irq_wake(bu21013_data->chip->irq); + enable_irq_wake(bu21013_data->irq); else - disable_irq(bu21013_data->chip->irq); + disable_irq(bu21013_data->irq); regulator_disable(bu21013_data->regulator); @@ -621,9 +652,9 @@ static int bu21013_resume(struct device *dev) bu21013_data->touch_stopped = false; if (device_may_wakeup(&client->dev)) - disable_irq_wake(bu21013_data->chip->irq); + disable_irq_wake(bu21013_data->irq); else - enable_irq(bu21013_data->chip->irq); + enable_irq(bu21013_data->irq); return 0; } diff --git a/include/linux/input/bu21013.h b/include/linux/input/bu21013.h index 05e0328..3ad1be5 100644 --- a/include/linux/input/bu21013.h +++ b/include/linux/input/bu21013.h @@ -9,13 +9,11 @@ /** * struct bu21013_platform_device - Handle the platform data - * @cs_en: pointer to the cs enable function - * @cs_dis: pointer to the cs disable function - * @irq_read_val: pointer to read the pen irq value function * @touch_x_max: touch x max * @touch_y_max: touch y max * @cs_pin: chip select pin * @irq: irq pin + * @touch_pin: touch gpio pin * @ext_clk: external clock flag * @x_flip: x flip flag * @y_flip: y flip flag @@ -24,13 +22,10 @@ * This is used to handle the platform data */ struct bu21013_platform_device { - int (*cs_en)(int reset_pin); - int (*cs_dis)(int reset_pin); - int (*irq_read_val)(void); int touch_x_max; int touch_y_max; unsigned int cs_pin; - unsigned int irq; + unsigned int touch_pin; bool ext_clk; bool x_flip; bool y_flip; -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 3/3] Input: bu21013_ts - Add support for Device Tree booting [not found] <1354021990-16978-1-git-send-email-lee.jones@linaro.org> 2012-11-27 13:13 ` [PATCH 1/3] Input: bu21013_ts - Request a regulator that actually exists Lee Jones 2012-11-27 13:13 ` [PATCH 2/3] Input: bu21013_ts - Move GPIO init and exit functions into the driver Lee Jones @ 2012-11-27 13:13 ` Lee Jones 2012-11-28 7:03 ` Dmitry Torokhov 2 siblings, 1 reply; 13+ messages in thread From: Lee Jones @ 2012-11-27 13:13 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: arnd, linus.walleij, Lee Jones, Dmitry Torokhov, linux-input Now we can register the BU21013_ts touch screen when booting with Device Tree enabled. Here we parse all the necessary components previously expected to be passed from platform data. Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> Cc: linux-input@vger.kernel.org Acked-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Lee Jones <lee.jones@linaro.org> --- drivers/input/touchscreen/bu21013_ts.c | 36 ++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/drivers/input/touchscreen/bu21013_ts.c b/drivers/input/touchscreen/bu21013_ts.c index 8982bea..dbbd1f8 100644 --- a/drivers/input/touchscreen/bu21013_ts.c +++ b/drivers/input/touchscreen/bu21013_ts.c @@ -15,6 +15,8 @@ #include <linux/regulator/consumer.h> #include <linux/module.h> #include <linux/gpio.h> +#include <linux/of.h> +#include <linux/of_gpio.h> #define PEN_DOWN_INTR 0 #define MAX_FINGERS 2 @@ -454,13 +456,30 @@ static void bu21013_cs_disable(struct bu21013_ts_data *bu21013_data) * This function used to initializes the i2c-client touchscreen * driver and returns integer. */ +static void __devinit bu21013_of_probe(struct device_node *np, + struct bu21013_platform_device *pdata) +{ + pdata->y_flip = pdata->x_flip = false; + + pdata->x_flip = of_property_read_bool(np, "rohm,flip-x"); + pdata->y_flip = of_property_read_bool(np, "rohm,flip-y"); + + of_property_read_u32(np, "rohm,touch-max-x", &pdata->touch_x_max); + of_property_read_u32(np, "rohm,touch-max-y", &pdata->touch_y_max); + + pdata->touch_pin = of_get_named_gpio(np, "touch-gpio", 0); + pdata->cs_pin = of_get_named_gpio(np, "reset-gpio", 0); + + pdata->ext_clk = false; +} + static int __devinit bu21013_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct bu21013_ts_data *bu21013_data; struct input_dev *in_dev; - const struct bu21013_platform_device *pdata = - client->dev.platform_data; + struct device_node *np = client->dev.of_node; + struct bu21013_platform_device *pdata = client->dev.platform_data; int error; if (!i2c_check_functionality(client->adapter, @@ -470,8 +489,17 @@ static int __devinit bu21013_probe(struct i2c_client *client, } if (!pdata) { - dev_err(&client->dev, "platform data not defined\n"); - return -EINVAL; + if (np) { + pdata = devm_kzalloc(&client->dev, sizeof(*pdata), + GFP_KERNEL); + if (!pdata) + return -ENOMEM; + + bu21013_of_probe(np, pdata); + } else { + dev_err(&client->dev, "no device tree or platform data\n"); + return -EINVAL; + } } if (!gpio_is_valid(pdata->touch_pin)) { -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] Input: bu21013_ts - Add support for Device Tree booting 2012-11-27 13:13 ` [PATCH 3/3] Input: bu21013_ts - Add support for Device Tree booting Lee Jones @ 2012-11-28 7:03 ` Dmitry Torokhov 2012-11-28 8:57 ` Lee Jones 2012-11-28 8:57 ` Lee Jones 0 siblings, 2 replies; 13+ messages in thread From: Dmitry Torokhov @ 2012-11-28 7:03 UTC (permalink / raw) To: Lee Jones Cc: linux-arm-kernel, linux-kernel, arnd, linus.walleij, linux-input Hi Lee, On Tue, Nov 27, 2012 at 01:13:10PM +0000, Lee Jones wrote: > Now we can register the BU21013_ts touch screen when booting with > Device Tree enabled. Here we parse all the necessary components > previously expected to be passed from platform data. I applied these 3 patches, but for DT we also need to specify compatible ID and set up of_match_table pointer. Please send me a follow-up patches doing that and also describing DT bindings for BU21013. Thanks. -- Dmitry ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] Input: bu21013_ts - Add support for Device Tree booting 2012-11-28 7:03 ` Dmitry Torokhov @ 2012-11-28 8:57 ` Lee Jones 2012-11-28 16:31 ` Mark Brown 2012-11-28 8:57 ` Lee Jones 1 sibling, 1 reply; 13+ messages in thread From: Lee Jones @ 2012-11-28 8:57 UTC (permalink / raw) To: Dmitry Torokhov Cc: linux-arm-kernel, linux-kernel, arnd, linus.walleij, linux-input Hi Dmitry, > On Tue, Nov 27, 2012 at 01:13:10PM +0000, Lee Jones wrote: > > Now we can register the BU21013_ts touch screen when booting with > > Device Tree enabled. Here we parse all the necessary components > > previously expected to be passed from platform data. > > I applied these 3 patches, but for DT we also need to specify compatible > ID and set up of_match_table pointer. Why do you need a compatible string? > Please send me a follow-up patches > doing that and also describing DT bindings for BU21013. I'll send the documentation as a seperate reply to your email. Kind regards, Lee -- Lee Jones Linaro ST-Ericsson Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] Input: bu21013_ts - Add support for Device Tree booting 2012-11-28 8:57 ` Lee Jones @ 2012-11-28 16:31 ` Mark Brown 2012-11-29 10:08 ` Lee Jones 0 siblings, 1 reply; 13+ messages in thread From: Mark Brown @ 2012-11-28 16:31 UTC (permalink / raw) To: Lee Jones Cc: Dmitry Torokhov, linux-input, arnd, linux-kernel, linux-arm-kernel, linus.walleij On Wed, Nov 28, 2012 at 08:57:31AM +0000, Lee Jones wrote: > > I applied these 3 patches, but for DT we also need to specify compatible > > ID and set up of_match_table pointer. > Why do you need a compatible string? The I2C subsystem guesses at a compatible string by default but it's much better to explicitly set one as conflicts do arise from time to time (eg, Wolfson parts are called WMxxxx but the WM prefix is also used by at least WonderMedia). ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] Input: bu21013_ts - Add support for Device Tree booting 2012-11-28 16:31 ` Mark Brown @ 2012-11-29 10:08 ` Lee Jones 2012-11-29 11:24 ` Mark Brown 0 siblings, 1 reply; 13+ messages in thread From: Lee Jones @ 2012-11-29 10:08 UTC (permalink / raw) To: Mark Brown Cc: Dmitry Torokhov, linux-input, arnd, linux-kernel, linux-arm-kernel, linus.walleij On Wed, 28 Nov 2012, Mark Brown wrote: > On Wed, Nov 28, 2012 at 08:57:31AM +0000, Lee Jones wrote: > > > > I applied these 3 patches, but for DT we also need to specify compatible > > > ID and set up of_match_table pointer. > > > Why do you need a compatible string? > > The I2C subsystem guesses at a compatible string by default but it's > much better to explicitly set one as conflicts do arise from time to > time (eg, Wolfson parts are called WMxxxx but the WM prefix is also used > by at least WonderMedia). It uses the exact device name, rather than guessing. I don't think you're allowed to have duplicate device names in the system, or there would be clashes at registration time. The system is the same for platform data and DT alike. In platform data we have: > struct i2c_board_info mop500_i2c0_devices_stuib[] = { > { > .type = "bu21013_tp", > .addr = 0x5C, > } > }; Where (i2c_client)client->name is populated by 'type', which should then match 'driver.name' exactly. And in DT we have: bu21013_tp@0x5c { compatible = "rhom,bu21013_tp"; reg = <0x5c>; }; Where (i2c_client)client->name is populated by of_modalias_node(), which uses the compatible string in the DTS(I) file and takes off the '<vendor>,' which should then match 'driver.name' exactly. Hence, there should be no need to have a compatible string in any i2c driver registration information. -- Lee Jones Linaro ST-Ericsson Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] Input: bu21013_ts - Add support for Device Tree booting 2012-11-29 10:08 ` Lee Jones @ 2012-11-29 11:24 ` Mark Brown 2012-11-29 12:00 ` Lee Jones 0 siblings, 1 reply; 13+ messages in thread From: Mark Brown @ 2012-11-29 11:24 UTC (permalink / raw) To: Lee Jones Cc: Dmitry Torokhov, linux-input, arnd, linux-kernel, linux-arm-kernel, linus.walleij [-- Attachment #1: Type: text/plain, Size: 1080 bytes --] On Thu, Nov 29, 2012 at 10:08:08AM +0000, Lee Jones wrote: > On Wed, 28 Nov 2012, Mark Brown wrote: > > The I2C subsystem guesses at a compatible string by default but it's > > much better to explicitly set one as conflicts do arise from time to > > time (eg, Wolfson parts are called WMxxxx but the WM prefix is also used > > by at least WonderMedia). > It uses the exact device name, rather than guessing. I don't think > you're allowed to have duplicate device names in the system, or there > would be clashes at registration time. > The system is the same for platform data and DT alike. Right, which is why this mostly works, but it's still better to provide an actual compatible string which we can be 100% certain will avoid conflicts. This is very low cost when one is already defining DT bindings. > Hence, there should be no need to have a compatible string in any i2c > driver registration information. We're getting away with it at present (and frankly nobody's going to build in two different drivers for a chip of the same name for practical systems anyway). [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] Input: bu21013_ts - Add support for Device Tree booting 2012-11-29 11:24 ` Mark Brown @ 2012-11-29 12:00 ` Lee Jones 2012-11-29 15:15 ` Mark Brown 0 siblings, 1 reply; 13+ messages in thread From: Lee Jones @ 2012-11-29 12:00 UTC (permalink / raw) To: Mark Brown Cc: linus.walleij, arnd, Dmitry Torokhov, linux-kernel, linux-input, linux-arm-kernel On Thu, 29 Nov 2012, Mark Brown wrote: > On Thu, Nov 29, 2012 at 10:08:08AM +0000, Lee Jones wrote: > > On Wed, 28 Nov 2012, Mark Brown wrote: > > > > The I2C subsystem guesses at a compatible string by default but it's > > > much better to explicitly set one as conflicts do arise from time to > > > time (eg, Wolfson parts are called WMxxxx but the WM prefix is also used > > > by at least WonderMedia). > > > It uses the exact device name, rather than guessing. I don't think > > you're allowed to have duplicate device names in the system, or there > > would be clashes at registration time. > > > The system is the same for platform data and DT alike. > > Right, which is why this mostly works, but it's still better to provide > an actual compatible string which we can be 100% certain will avoid > conflicts. This is very low cost when one is already defining DT > bindings. I know that it's an easy thing to do, but I'm more worried about what would happen if the an I2C device is registered using the current way (stripping the compatible string and using it as a client look-up) and we also provide a compatible entry in the driver itself. Do you know if there is any danger of duplicate registration or suchlike? > > Hence, there should be no need to have a compatible string in any i2c > > driver registration information. > > We're getting away with it at present (and frankly nobody's going to > build in two different drivers for a chip of the same name for practical > systems anyway). Right. In the same way as we're getting away with it when we register a platform_device using the register/add routines. -- Lee Jones Linaro ST-Ericsson Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] Input: bu21013_ts - Add support for Device Tree booting 2012-11-29 12:00 ` Lee Jones @ 2012-11-29 15:15 ` Mark Brown 0 siblings, 0 replies; 13+ messages in thread From: Mark Brown @ 2012-11-29 15:15 UTC (permalink / raw) To: Lee Jones Cc: Dmitry Torokhov, linux-input, arnd, linux-kernel, linux-arm-kernel, linus.walleij [-- Attachment #1: Type: text/plain, Size: 1287 bytes --] On Thu, Nov 29, 2012 at 12:00:00PM +0000, Lee Jones wrote: > On Thu, 29 Nov 2012, Mark Brown wrote: > > Right, which is why this mostly works, but it's still better to provide > > an actual compatible string which we can be 100% certain will avoid > > conflicts. This is very low cost when one is already defining DT > > bindings. > I know that it's an easy thing to do, but I'm more worried about > what would happen if the an I2C device is registered using the > current way (stripping the compatible string and using it as a > client look-up) and we also provide a compatible entry in the > driver itself. Do you know if there is any danger of duplicate > registration or suchlike? That's totally fine, we try first with compatible properties and only look for the fallback if there aren't any. > > > Hence, there should be no need to have a compatible string in any i2c > > > driver registration information. > > We're getting away with it at present (and frankly nobody's going to > > build in two different drivers for a chip of the same name for practical > > systems anyway). > Right. In the same way as we're getting away with it when we > register a platform_device using the register/add routines. Those are all completely Linux-defined of course which helps as well. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] Input: bu21013_ts - Add support for Device Tree booting 2012-11-28 7:03 ` Dmitry Torokhov 2012-11-28 8:57 ` Lee Jones @ 2012-11-28 8:57 ` Lee Jones 1 sibling, 0 replies; 13+ messages in thread From: Lee Jones @ 2012-11-28 8:57 UTC (permalink / raw) To: Dmitry Torokhov Cc: linux-arm-kernel, linux-kernel, arnd, linus.walleij, linux-input Author: Lee Jones <lee.jones@linaro.org> Date: Fri Sep 28 14:35:43 2012 +0100 Input: bu21013_ts - Add support for Device Tree booting Now we can register the BU21013_ts touch screen when booting with Device Tree enabled. Here we parse all the necessary components previously expected to be passed from platform data. Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> Cc: linux-input@vger.kernel.org Acked-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Lee Jones <lee.jones@linaro.org> diff --git a/Documentation/devicetree/bindings/input/touchscreen/bu21013.txt b/Documentation/devicetree/bindings/input/touchscreen/bu21013.txt new file mode 100644 index 0000000..ca5a2c8 --- /dev/null +++ b/Documentation/devicetree/bindings/input/touchscreen/bu21013.txt @@ -0,0 +1,28 @@ +* Rohm BU21013 Touch Screen + +Required properties: + - compatible : "rohm,bu21013_tp" + - reg : I2C device address + +Optional properties: + - touch-gpio : GPIO pin registering a touch event + - <supply_name>-supply : Phandle to a regulator supply + - rohm,touch-max-x : Maximum outward permitted limit in the X axis + - rohm,touch-max-y : Maximum outward permitted limit in the Y axis + - rohm,flip-x : Flip touch coordinates on the X axis + - rohm,flip-y : Flip touch coordinates on the Y axis + +Example: + + i2c@80110000 { + bu21013_tp@0x5c { + compatible = "rohm,bu21013_tp"; + reg = <0x5c>; + touch-gpio = <&gpio2 20 0x4>; + avdd-supply = <&ab8500_ldo_aux1_reg>; + + rohm,touch-max-x = <384>; + rohm,touch-max-y = <704>; + rohm,flip-y; + }; + }; diff --git a/drivers/input/touchscreen/bu21013_ts.c b/drivers/input/touchscreen/bu21013_ts.c index 16f29d6..07335ac 100644 --- a/drivers/input/touchscreen/bu21013_ts.c +++ b/drivers/input/touchscreen/bu21013_ts.c @@ -15,6 +15,8 @@ #include <linux/regulator/consumer.h> #include <linux/module.h> #include <linux/gpio.h> +#include <linux/of.h> +#include <linux/of_gpio.h> #define PEN_DOWN_INTR 0 #define MAX_FINGERS 2 @@ -473,13 +475,30 @@ static void bu21013_free_irq(struct bu21013_ts_data *bu21013_data) * This function used to initializes the i2c-client touchscreen * driver and returns integer. */ +static void __devinit bu21013_of_probe(struct device_node *np, + struct bu21013_platform_device *pdata) +{ + pdata->y_flip = pdata->x_flip = false; + + pdata->x_flip = of_property_read_bool(np, "rohm,flip-x"); + pdata->y_flip = of_property_read_bool(np, "rohm,flip-y"); + + of_property_read_u32(np, "rohm,touch-max-x", &pdata->touch_x_max); + of_property_read_u32(np, "rohm,touch-max-y", &pdata->touch_y_max); + + pdata->touch_pin = of_get_named_gpio(np, "touch-gpio", 0); + pdata->cs_pin = of_get_named_gpio(np, "reset-gpio", 0); + + pdata->ext_clk = false; +} + static int __devinit bu21013_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct bu21013_ts_data *bu21013_data; struct input_dev *in_dev; - const struct bu21013_platform_device *pdata = - client->dev.platform_data; + struct device_node *np = client->dev.of_node; + struct bu21013_platform_device *pdata = client->dev.platform_data; int error; if (!i2c_check_functionality(client->adapter, @@ -489,8 +508,17 @@ static int __devinit bu21013_probe(struct i2c_client *client, } if (!pdata) { - dev_err(&client->dev, "platform data not defined\n"); - return -EINVAL; + if (np) { + pdata = devm_kzalloc(&client->dev, sizeof(*pdata), + GFP_KERNEL); + if (!pdata) + return -ENOMEM; + + bu21013_of_probe(np, pdata); + } else { + dev_err(&client->dev, "no device tree or platform data\n"); + return -EINVAL; + } } pdata->irq = gpio_to_irq(pdata->touch_pin); ^ permalink raw reply related [flat|nested] 13+ messages in thread
end of thread, other threads:[~2012-11-29 15:15 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <1354021990-16978-1-git-send-email-lee.jones@linaro.org> 2012-11-27 13:13 ` [PATCH 1/3] Input: bu21013_ts - Request a regulator that actually exists Lee Jones 2012-11-27 13:34 ` Mark Brown 2012-11-27 14:34 ` Lee Jones 2012-11-27 13:13 ` [PATCH 2/3] Input: bu21013_ts - Move GPIO init and exit functions into the driver Lee Jones 2012-11-27 13:13 ` [PATCH 3/3] Input: bu21013_ts - Add support for Device Tree booting Lee Jones 2012-11-28 7:03 ` Dmitry Torokhov 2012-11-28 8:57 ` Lee Jones 2012-11-28 16:31 ` Mark Brown 2012-11-29 10:08 ` Lee Jones 2012-11-29 11:24 ` Mark Brown 2012-11-29 12:00 ` Lee Jones 2012-11-29 15:15 ` Mark Brown 2012-11-28 8:57 ` Lee Jones
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).