From 5664ae20c4090f7c7577a3bf292c5b50cea159f2 Mon Sep 17 00:00:00 2001 From: Russell King Date: Sat, 21 Jan 2012 15:53:42 +0000 Subject: [PATCH] --- yaml --- r: 296380 b: refs/heads/master c: 54292a4649a5dd93562d10f188a8e201afebfe2f h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/mfd/ucb1x00-assabet.c | 43 ++++++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 53ea398febb1..6b7bfad7c16d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 69dde86aa616b09bb3ef39a5ab783f82254d241c +refs/heads/master: 54292a4649a5dd93562d10f188a8e201afebfe2f diff --git a/trunk/drivers/mfd/ucb1x00-assabet.c b/trunk/drivers/mfd/ucb1x00-assabet.c index b7be613cb503..b63c0756a669 100644 --- a/trunk/drivers/mfd/ucb1x00-assabet.c +++ b/trunk/drivers/mfd/ucb1x00-assabet.c @@ -11,9 +11,13 @@ */ #include #include +#include +#include #include +#include +#include +#include #include -#include #include #define UCB1X00_ATTR(name,input)\ @@ -35,14 +39,45 @@ UCB1X00_ATTR(batt_temp, UCB_ADC_INP_AD2); static int ucb1x00_assabet_add(struct ucb1x00_dev *dev) { - device_create_file(&dev->ucb->dev, &dev_attr_vbatt); - device_create_file(&dev->ucb->dev, &dev_attr_vcharger); - device_create_file(&dev->ucb->dev, &dev_attr_batt_temp); + struct ucb1x00 *ucb = dev->ucb; + struct platform_device *pdev; + struct gpio_keys_platform_data keys; + static struct gpio_keys_button buttons[6]; + unsigned i; + + memset(buttons, 0, sizeof(buttons)); + memset(&keys, 0, sizeof(keys)); + + for (i = 0; i < ARRAY_SIZE(buttons); i++) { + buttons[i].code = BTN_0 + i; + buttons[i].gpio = ucb->gpio.base + i; + buttons[i].type = EV_KEY; + buttons[i].can_disable = true; + } + + keys.buttons = buttons; + keys.nbuttons = ARRAY_SIZE(buttons); + keys.poll_interval = 50; + keys.name = "ucb1x00"; + + pdev = platform_device_register_data(&ucb->dev, "gpio-keys", -1, + &keys, sizeof(keys)); + + device_create_file(&ucb->dev, &dev_attr_vbatt); + device_create_file(&ucb->dev, &dev_attr_vcharger); + device_create_file(&ucb->dev, &dev_attr_batt_temp); + + dev->priv = pdev; return 0; } static void ucb1x00_assabet_remove(struct ucb1x00_dev *dev) { + struct platform_device *pdev = dev->priv; + + if (!IS_ERR(pdev)) + platform_device_unregister(pdev); + device_remove_file(&dev->ucb->dev, &dev_attr_batt_temp); device_remove_file(&dev->ucb->dev, &dev_attr_vcharger); device_remove_file(&dev->ucb->dev, &dev_attr_vbatt);