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:
[<c002c6ac>] (unwind_backtrace+0x0/0xf8) from [<c003b48c>] 
(warn_slowpath_common+0x4c/0x64)
[<c003b48c>] (warn_slowpath_common+0x4c/0x64) from [<c003b4c0>] 
(warn_slowpath_null+0x1c/0x24)
[<c003b4c0>] (warn_slowpath_null+0x1c/0x24) from [<c01aed60>] 
(__gpio_set_value+0x4c/0x5c)
[<c01aed60>] (__gpio_set_value+0x4c/0x5c) from [<c0033bd4>] 
(da850_evm_ui_expander_setup+0x1e4/0x2
44)
[<c0033bd4>] (da850_evm_ui_expander_setup+0x1e4/0x244) from [<c02e2e1c>] 
(pca953x_probe+0x1f8/0x29
0)
<snip>

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 <[email protected]>
Reviewed-by: Chris Cordahi <[email protected]>
Reviewed-by: Kevin Killman <[email protected]>

--

Tested by modifying the config to allow pca953x as a module and modifying the 
board setup to forcibly run the NAND/NOR setup because I am using a UBIFS
rootfs in NAND w/o initrd (yet) then inspecting the kernel output after 
'insmod pca953x.ko' and 'rmmod -f pca953x.ko'; with this patch there are no
WARNINGs printed.

Changes since V1:
 * added _cansleep variant calls to the teardown() function, suggested by
   Kevin Hillman.
 * changed patch subject line as per Kevin Hillman's suggestion.

---
 arch/arm/mach-davinci/board-da850-evm.c |    8 ++++----
 1 files 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 c6e11c6..f89b0b7 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);
-- 
1.7.0.4

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to