omap: mux: fix multipath gpio handling
Subsystems (3)
PATCH 1/1 omap: mux: fix multipath gpio handling
OMAP3530 CBB package can have GPIO126 muxed on 2 pins: mmc1_dat4 and cam_strobe. This causes a problem with current multipath GPIO mux handling, which muxes both pins as GPIO126 and makes the GPIO unusable.
Fix this by not muxing any pins if multipath GPIO is detected and just print a warning instead. It's up to board files to set correct mux using omap_mux_init_signal and pin name.
--- arch/arm/mach-omap2/mux.c | 38 ++++++++++++++++++++------------------ 1 files changed, 20 insertions(+), 18 deletions(-)
arch/arm/mach-omap2/mux.c +20 -18
@@ -87,6 +87,9 @@ static char *omap_mux_options;int __init omap_mux_init_gpio (int gpio,int val) {struct omap_mux_entry *e; +struct omap_mux *gpio_mux; +u16 old_mode; +u16 mux_mode;int found =0 ;if (!gpio)
@@ -95,34 +98,33 @@ int __init omap_mux_init_gpio(int gpio, int val)list_for_each_entry (e, &muxmodes, node) {struct omap_mux *m = &e->mux;if (gpio == m->gpio) { -u16 old_mode; -u16 mux_mode; - - old_mode =omap_mux_read (m->reg_offset); - mux_mode = val & ~(OMAP_MUX_NR_MODES -1 ); -if (omap_mux_flags &MUXABLE_GPIO_MODE3 ) - mux_mode |=OMAP_MUX_MODE3 ; -else - mux_mode |=OMAP_MUX_MODE4 ; -printk (KERN_DEBUG "mux: Setting signal " -"%s.gpio%i 0x%04x -> 0x%04x\n" , - m->muxnames[0 ], gpio, old_mode, mux_mode); -omap_mux_write (mux_mode, m->reg_offset); + gpio_mux = m; found++; } } -if (found ==1 ) -return 0 ; +if (found ==0 ) { +printk (KERN_ERR "mux: Could not set gpio%i\n" , gpio); +return -ENODEV ; + }if (found >1 ) { -printk (KERN_ERR "mux: Multiple gpio paths for gpio%i\n" , gpio); +printk (KERN_INFO "mux: Multiple gpio paths (%d) for gpio%i\n" , + found, gpio);return -EINVAL ; } -printk (KERN_ERR "mux: Could not set gpio%i\n" , gpio); + old_mode =omap_mux_read (gpio_mux->reg_offset); + mux_mode = val & ~(OMAP_MUX_NR_MODES -1 ); +if (omap_mux_flags &MUXABLE_GPIO_MODE3 ) + mux_mode |=OMAP_MUX_MODE3 ; +else + mux_mode |=OMAP_MUX_MODE4 ; +printk (KERN_DEBUG "mux: Setting signal %s.gpio%i 0x%04x -> 0x%04x\n" , + gpio_mux->muxnames[0 ], gpio, old_mode, mux_mode); +omap_mux_write (mux_mode, gpio_mux->reg_offset); -return -ENODEV ; +return 0 ; }int __init omap_mux_init_signal (char *muxname,int val)
Signature · 1 line
1.5.6.3
Tony Lindgren
maintainerQuoted 7 lines · Grazvydas Ignotas
OMAP3530 CBB package can have GPIO126 muxed on 2 pins:
mmc1_dat4andcam_strobe. This causes a problem with current multipath GPIO mux handling, which muxes both pins as GPIO126 and makes the GPIO unusable.Fix this by not muxing any pins if multipath GPIO is detected and just print a warning instead. It's up to board files to set correct mux using
omap_mux_init_signaland pin name.
This looks good to me. Are you OK if we merge it during the upcoming merge window? Kind of worried that we might break some other boards that rely on the first GPIO getting muxed..
Tony
Quoted 5 lines · Tony Lindgren
Quoted 4 lines · Grazvydas Ignotas
OMAP3530 CBB package can have GPIO126 muxed on 2 pins:
mmc1_dat4andcam_strobe. This causes a problem with current multipath GPIO mux handling, which muxes both pins as GPIO126 and makes the GPIO unusable.
Quoted 7 lines
Quoted 3 lines
Fix this by not muxing any pins if multipath GPIO is detected and just print a warning instead. It's up to board files to set correct mux using
omap_mux_init_signaland pin name.This looks good to me. Are you OK if we merge it during the upcoming merge window? Kind of worried that we might break some other boards that rely on the first GPIO getting muxed..
Yeah that should be fine, no need to rush.
Tony Lindgren
maintainerPATCH 1/1 omap: mux: fix multipath gpio handling
In reply to Grazvydas IgnotasThis patch has been applied to the linux-omap
by youw fwiendly patch wobot.
Branch in linux-omap: for-next
Initial commit ID (Likely to change): 916c48fbec05b4718b4fd447f634725ced6cc9e7
PatchWorks
http://patchwork.kernel.org/patch/110284/
Git (Likely to change, and takes a while to get mirrored)
http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a=commit;h=916c48fbec05b4718b4fd447f634725ced6cc9e7