Hi folks,
I have a USB SD card reader on an i.MX6, running Android. I am trying to get the kernel to detect when a card is inserted. Right now, it properly detects the card only if it is plugged in before the USB reader is plugged into the system.
I have tested the behavior on multiple PCs, and the USB SD card reader behaves as expected.
In Android, mounting is controlled by vold. vold appears to be working correctly, so I enabled extra logs so I see all netlink/uevents that are produced.
When I plug in the reader, /sys/class/block/sda shows up regardless of if a device is in it—that is expected. Then, when I insert a card, I get no uevent. I echoed 2000 into /sys/module/block/parameters/events_dfl_poll_msecs, and now when I insert a card (and wait about 2 seconds), I get an event:
DEVPATH=/devices/blah/blah/blah/block/sda
DISK_MEDIA_CHANGE=1
MAJOR=8
MINOR=32
DEVNAME=sda
DEVTYPE=disk
NPARTS=0
There are no further events after that.
All of that looks fine, except… NPARTS=0!?!?! The card has one partition, and if I unplug the reader, insert the card into the reader, and plug the reader in, I get
DEVPATH=/devices/blah/blah/blah/block/sda
MAJOR=8
MINOR=32
DEVNAME=sda
DEVTYPE=disk
NPARTS=1
I expect additional events, like a block->disk event and a block->partition event after block->DISK_MEDIA_CHANGE.
Is this something I need to configure? If not, if this is something that is simply not supported, I believe I need to set it up so that on DISK_MEDIA_CHANGE, the kernel also rescans for partitions. Any thoughts on where to do it? I see code like that in block/sd.c, fs/block_dev.c, and fs/genhd.c. (A USB SD card reader touches lots of parts of the kernel!)
Thanks!
I think the problem you are having it is in the USB more than in the SD Card drvier itself, do you have a Log, so we can review how the device it is enumerated, do you have an schematic of the USB part to see how is the OTG or it is in a FSL board?, If you can use a USB Sniffer to see what it is happening when you plug the SD would be great.