From 47e7cb148a12f6f825302a85cd2b78a0948be741 Mon Sep 17 00:00:00 2001 From: Ben Gardiner Date: Mon, 15 Nov 2010 09:42:52 -0500 Subject: [PATCH] davinci: da850-evm: UI expander gpio_set_value can sleep, use _cansleep When the RMII PHY on the UI board is enabled with CONFIG_DA850_UI_RMII then then following will be printed to the console when warnings are also enabled: WARNING: at drivers/gpio/gpiolib.c:1567 __gpio_set_value+0x4c/0x5c() Modules linked in: [] (unwind_backtrace+0x0/0xf8) from [] (warn_slowpath_common+0x4c/0x64) [] (warn_slowpath_common+0x4c/0x64) from [] (warn_slowpath_null+0x1c/0x24) [] (warn_slowpath_null+0x1c/0x24) from [] (__gpio_set_value+0x4c/0x5c) [] (__gpio_set_value+0x4c/0x5c) from [] (da850_evm_ui_expander_setup+0x1e4/0x2 44) [] (da850_evm_ui_expander_setup+0x1e4/0x244) from [] (pca953x_probe+0x1f8/0x29 0) Traced the WARN_ON to the gpio_set_value(rmii_sel,0) call in da850_evm_setup_emac_rmii. Replacing the call with the _cansleep variant results in no more warning. Also replacing the gpio_set_value calls in the teardown function. Signed-off-by: Ben Gardiner Reviewed-by: Chris Cordahi Signed-off-by: Kevin Hilman --- arch/arm/mach-davinci/board-da850-evm.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c index c6e11c682e4..f89b0b7cb6f 100644 --- a/arch/arm/mach-davinci/board-da850-evm.c +++ b/arch/arm/mach-davinci/board-da850-evm.c @@ -266,7 +266,7 @@ static inline void da850_evm_setup_emac_rmii(int rmii_sel) struct davinci_soc_info *soc_info = &davinci_soc_info; soc_info->emac_pdata->rmii_en = 1; - gpio_set_value(rmii_sel, 0); + gpio_set_value_cansleep(rmii_sel, 0); } #else static inline void da850_evm_setup_emac_rmii(int rmii_sel) { } @@ -325,9 +325,9 @@ static int da850_evm_ui_expander_teardown(struct i2c_client *client, unsigned gpio, unsigned ngpio, void *c) { /* deselect all functionalities */ - gpio_set_value(gpio + 5, 1); - gpio_set_value(gpio + 6, 1); - gpio_set_value(gpio + 7, 1); + gpio_set_value_cansleep(gpio + 5, 1); + gpio_set_value_cansleep(gpio + 6, 1); + gpio_set_value_cansleep(gpio + 7, 1); gpio_free(gpio + 5); gpio_free(gpio + 6); -- 2.43.2