Subject: [PATCH 0/3] omap hsmmc init cleanup and section warning fixes for v3.4 merge window

From: [email-masked] (Rajendra Nayak)
Date: Fri, 17 Feb 2012 15:03:09 +0530

[]...
>>>>> 3. Load the gpio-twl4030 module
>>>>
>>>> I was expecting this to now detect the card, but I instead got
>>>> this error which seems to tell gpio-twl4030 has problems
>>>> when built/used as a module, outside of the mmc issues.
>>>
>>> Looks like I was mislead with the errors and though the twl4030
>>> gpio probe was bailing out with errors, which its not.
>>> It does seem to go ahead, does a mmc late init which registers
>>> the mmc omap_device and hence does a platform_device_add, but the
>>> device never seem to get probed. mmc driver is built in and
>>> registered.
>>>
>>>>
>>>> # insmod gpio-twl4030.ko
>>>> [   16.217864] twl4030_gpio twl4030_gpio: can't dispatch IRQs from modules
>>>> [   16.242004] gpiochip_add: registered GPIOs 192 to 211 on device: twl4030
>>>>
>>>>
>>>>> 4. Remove the gpio-twl4030 module
>>>>> 5. Re-load the gpio-twl4030.ko module
>>>>>
>>>>> and report back what you get.  Thanks.
>>>
>>
>> (4) and (5) are the key bits of what I was asking you to do.
>
> Okay, so that was a total waste of time and effort, because you didn't do
> what I asked.

Sorry, I did'nt repond back because I wanted to get this resolved
completely before I did.

(3) did not probe the inserted mmc device because the driver was
doing a platform_driver_probe() and not a platform_driver_register().

Once I fixed that and removed the __init from probe, I then hit a
failure with gpio_to_irq() call in the mmc driver probe.

This was beacuse the twl gpio driver does not register irqs as said by 
this error at driver load...
 >>>> [   16.217864] twl4030_gpio twl4030_gpio: can't dispatch IRQs from 
modules
... apparently because there is no way to unregister a irq once the
module is unloaded.

That makes sdmmc pretty much unusable if twl gpio is built as a module.

>
> Tony: I think there's a bug here - if the gpio-twl4030 module is inserted,
> removed and re-inserted, I think we'll end up creating the devices for MMC
> twice with the same name, resulting in sysfs complaining very loudly.

I still went ahead and tried (4) becasue I knew I would hit the above
issue. However I end up with a rmmod complaining 'resource temporarily
unavailable' because I see there are 3 gpio_requests, which I found
were from the .setup callback in the board file (I am using beagle).
The beagle board file does not seem to however register a .teardown
hook provided by twl4030 gpio platform_data structure to do a gpio_free.
So I am now trying to get the teardown function clean stuff up including
unregister the mmc device, which should also fix the problem with
multiple mmc device register that you reported with insmod/rmmod/insmod
  sequence.

I will post patches on top of Tony's series to fix all these issues.