From: Ben Gardiner Date: Mon, 15 Nov 2010 14:42:52 +0000 (-0500) Subject: davinci: da850-evm: UI expander gpio_set_value can sleep, use _cansleep X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=47e7cb148a12f6f825302a85cd2b78a0948be741;p=linux-beck.git 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 --- diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c index c6e11c682e4c..f89b0b7cb6f2 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);