> -----Original Message-----
> From: Gopinath, Thara
> Subject: RE: [PATCH v2] omap: 4430sdp board support for the the GPIO keys
>
>
>
> >>-----Original Message-----
> >>From: linux-omap-ow...@vger.kernel.org [mailto:linux-omap-
> ow...@vger.kernel.org] On Behalf Of
> >>Shubhrajyoti D
> >>Sent: Tuesday, August 24, 2010 10:58 AM
> >>To: linux-omap@vger.kernel.org
> >>Cc: Datta, Shubhrajyoti
> >>Subject: [PATCH v2] omap: 4430sdp board support for the the GPIO keys
> >>
> >>omap 4430sdp board support for the GPIO keys.
> >>The proximity sensor is connected to GPIO and is registered as a
> >>GPIO key.
> >>- Making the default state of the sensor off at bootup
> >>
> >>Signed-off-by: Shubhrajyoti D <shubhrajy...@ti.com>
> >>---
> >> arch/arm/mach-omap2/board-4430sdp.c | 61
> +++++++++++++++++++++++++++++++++++
> >> 1 files changed, 61 insertions(+), 0 deletions(-)
> >>
> >>diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-
> omap2/board-4430sdp.c
> >>index 9447644..85b0e0c 100644
> >>--- a/arch/arm/mach-omap2/board-4430sdp.c
> >>+++ b/arch/arm/mach-omap2/board-4430sdp.c
> >>@@ -20,6 +20,7 @@
> >> #include <linux/usb/otg.h>
> >> #include <linux/spi/spi.h>
> >> #include <linux/i2c/twl.h>
> >>+#include <linux/gpio_keys.h>
> >> #include <linux/regulator/machine.h>
> >> #include <linux/leds.h>
> >>
> >>@@ -40,6 +41,8 @@
> >> #define ETH_KS8851_IRQ 34
> >> #define ETH_KS8851_POWER_ON 48
> >> #define ETH_KS8851_QUART 138
> >>+#define OMAP4_SFH7741_SENSOR_OUTPUT_GPIO 184
> >>+#define OMAP4_SFH7741_ENABLE_GPIO 188
> >>
> >> static struct gpio_led sdp4430_gpio_leds[] = {
> >> {
> >>@@ -77,11 +80,47 @@ static struct gpio_led sdp4430_gpio_leds[] = {
> >>
> >> };
> >>
> >>+static struct gpio_keys_button sdp4430_gpio_keys[] = {
> >>+ {
> >>+ .desc = "Proximity Sensor",
> >>+ .type = EV_SW,
> >>+ .code = SW_FRONT_PROXIMITY,
> >>+ .gpio = OMAP4_SFH7741_SENSOR_OUTPUT_GPIO,
> >>+ .active_low = 0,
> >>+ }
> >>+};
> >>+
> >> static struct gpio_led_platform_data sdp4430_led_data = {
> >> .leds = sdp4430_gpio_leds,
> >> .num_leds = ARRAY_SIZE(sdp4430_gpio_leds),
> >> };
> >>
> >>+static int omap_prox_activate(struct device *dev)
> >>+{
> >>+ gpio_set_value(OMAP4_SFH7741_ENABLE_GPIO , 1);
> >>+ return 0;
> >>+}
> >>+
> >>+static void omap_prox_deactivate(struct device *dev)
> >>+{
> >>+ gpio_set_value(OMAP4_SFH7741_ENABLE_GPIO , 0);
> >>+}
> >>+
> >>+static struct gpio_keys_platform_data sdp4430_gpio_keys_data = {
> >>+ .buttons = sdp4430_gpio_keys,
> >>+ .nbuttons = ARRAY_SIZE(sdp4430_gpio_keys),
> >>+ .enable = omap_prox_activate,
> >>+ .disable = omap_prox_deactivate,
> >>+};
> >>+
> >>+static struct platform_device sdp4430_gpio_keys_device = {
> >>+ .name = "gpio-keys",
> >>+ .id = -1,
> >>+ .dev = {
> >>+ .platform_data = &sdp4430_gpio_keys_data,
> >>+ },
> >>+};
> >>+
> >> static struct platform_device sdp4430_leds_gpio = {
> >> .name = "leds-gpio",
> >> .id = -1,
> >>@@ -161,6 +200,7 @@ static struct platform_device sdp4430_lcd_device = {
> >>
> >> static struct platform_device *sdp4430_devices[] __initdata = {
> >> &sdp4430_lcd_device,
> >>+ &sdp4430_gpio_keys_device,
> >> &sdp4430_leds_gpio,
> >> };
> >>
> >>@@ -426,6 +466,26 @@ static int __init omap4_i2c_init(void)
> >> omap_register_i2c_bus(4, 400, NULL, 0);
> >> return 0;
> >> }
> >>+
> >>+static void __init omap_sfh7741prox_init(void)
> >>+{
> >>+ int error;
> >>+
> >>+ error = gpio_request(OMAP4_SFH7741_ENABLE_GPIO, "sfh7741");
> >>+ if (error < 0) {
> >>+ pr_err("%s:failed to request GPIO %d, error %d\n",
> >>+ __func__, OMAP4_SFH7741_ENABLE_GPIO, error);
> >>+ return;
> >>+ }
> >>+
> >>+ error = gpio_direction_output(OMAP4_SFH7741_ENABLE_GPIO , 0);
> >>+ if (error < 0) {
> >>+ pr_err("%s: GPIO configuration failed: GPIO %d,error %d\n",
> >>+ __func__, OMAP4_SFH7741_ENABLE_GPIO, error);
> >>+ gpio_free(OMAP4_SFH7741_ENABLE_GPIO);
> >>+ }
> >>+}
> >>+
> >> static void __init omap_4430sdp_init(void)
> >> {
> >> int status;
> >>@@ -448,6 +508,7 @@ static void __init omap_4430sdp_init(void)
> >> spi_register_board_info(sdp4430_spi_board_info,
> >> ARRAY_SIZE(sdp4430_spi_board_info));
> >> }
> >>+ omap_sfh7741prox_init();
>
> Hello Shubro,
>
> I believe you are calling omap_sfh7741prox_init at the end of
> omap_4430sdp_init
> which means your sdp4430_gpio_keys_device is registered much before this.
> This could mean that the probe of your gpio-keys driver could get called
> before
> omap_sfh7741prox_init. Assume this is the case and your probe calls into
> pdata->enable
> or pdata->disable which is omap_prox_activate/omap_prox_deactivate as per
> this
> patch, these API's will try accessing gpio APIs for
> OMAP4_SFH7741_ENABLE_GPIO without
> a gpio_request happening for this pin as omap_sfh7741prox_init is called
> later.
> Maybe such a case might never arise. But I would say you should do a
> request_gpio for
> OMAP4_SFH7741_ENABLE_GPIO before the driver probe is called.
Hi Thara,
Thanks for your review. Will send another patch.
>
> Regards
> Thara
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html