mfd/gpio: add a GPIO interface to the UCB1400 MFD chip driver via gpiolib
Cc: Eric Miao <eric.y.miao@gmail.com> Cc: Russell King <rmk@arm.linux.org.uk> Cc: David Brownell <david-b@pacbell.net> Cc: Samuel Ortiz <sameo@openedhand.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
1e5db00687
commit
4cf8e53b3b
@@ -48,9 +48,11 @@ static int ucb1400_core_probe(struct device *dev)
|
||||
int err;
|
||||
struct ucb1400 *ucb;
|
||||
struct ucb1400_ts ucb_ts;
|
||||
struct ucb1400_gpio ucb_gpio;
|
||||
struct snd_ac97 *ac97;
|
||||
|
||||
memset(&ucb_ts, 0, sizeof(ucb_ts));
|
||||
memset(&ucb_gpio, 0, sizeof(ucb_gpio));
|
||||
|
||||
ucb = kzalloc(sizeof(struct ucb1400), GFP_KERNEL);
|
||||
if (!ucb) {
|
||||
@@ -68,25 +70,44 @@ static int ucb1400_core_probe(struct device *dev)
|
||||
goto err0;
|
||||
}
|
||||
|
||||
/* GPIO */
|
||||
ucb_gpio.ac97 = ac97;
|
||||
ucb->ucb1400_gpio = platform_device_alloc("ucb1400_gpio", -1);
|
||||
if (!ucb->ucb1400_gpio) {
|
||||
err = -ENOMEM;
|
||||
goto err0;
|
||||
}
|
||||
err = platform_device_add_data(ucb->ucb1400_gpio, &ucb_gpio,
|
||||
sizeof(ucb_gpio));
|
||||
if (err)
|
||||
goto err1;
|
||||
err = platform_device_add(ucb->ucb1400_gpio);
|
||||
if (err)
|
||||
goto err1;
|
||||
|
||||
/* TOUCHSCREEN */
|
||||
ucb_ts.ac97 = ac97;
|
||||
ucb->ucb1400_ts = platform_device_alloc("ucb1400_ts", -1);
|
||||
if (!ucb->ucb1400_ts) {
|
||||
err = -ENOMEM;
|
||||
goto err0;
|
||||
goto err2;
|
||||
}
|
||||
err = platform_device_add_data(ucb->ucb1400_ts, &ucb_ts,
|
||||
sizeof(ucb_ts));
|
||||
if (err)
|
||||
goto err1;
|
||||
goto err3;
|
||||
err = platform_device_add(ucb->ucb1400_ts);
|
||||
if (err)
|
||||
goto err1;
|
||||
goto err3;
|
||||
|
||||
return 0;
|
||||
|
||||
err1:
|
||||
err3:
|
||||
platform_device_put(ucb->ucb1400_ts);
|
||||
err2:
|
||||
platform_device_unregister(ucb->ucb1400_gpio);
|
||||
err1:
|
||||
platform_device_put(ucb->ucb1400_gpio);
|
||||
err0:
|
||||
kfree(ucb);
|
||||
err:
|
||||
@@ -98,6 +119,8 @@ static int ucb1400_core_remove(struct device *dev)
|
||||
struct ucb1400 *ucb = dev_get_drvdata(dev);
|
||||
|
||||
platform_device_unregister(ucb->ucb1400_ts);
|
||||
platform_device_unregister(ucb->ucb1400_gpio);
|
||||
|
||||
kfree(ucb);
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user