TI 7x21 FlashMedia/SD Host Controller (104C:8033 & 104C:8034)
Update: TI 7x21 FlashMedia/SD Host Controller (104C:8033 & 104C:8034) The Compaq R4100 series of laptops feature a 6-in-1 memory card reader based on the widely used Texas Instruments 7x21 chips. Although TI provides Windows drivers there is very little information available to assist in development of a free Linux device driver for it. It appears that TI actually contracted another company (Everest) to write a Linux device driver, although the write-up on their work shows great potential there is no sign of the driver or its source code. There is however a binary version of the driver built for the 2.6.11 kernel available here - unfortunately it's useless for me since I am running a 64-bit kernel. I found a few promising leads while Googling where reverse engineering the Windows driver was helping development of a native kernel driver for it. http://tifmxx.berlios.de/ http://www.webcon.ca/~imorgan/tifm21/ Unfortunately there is no fully working driver as yet, however the Subversion repository at tifmxx.berlios.de is very active, I checked out the latest revision of the code to test it out make insmod tifmxx.ko
returned: tifmxx: Unknown symbol scsi_remove_host tifmxx: Unknown symbol pci_intx tifmxx: Unknown symbol tifmxx_mmcsd_wait_for_ae tifmxx: Unknown symbol scsi_host_put tifmxx: Unknown symbol tifmxx_mmcsd_wait_for_brs tifmxx: Unknown symbol tifmxx_mmcsd_wait_for_card tifmxx: Unknown symbol scsi_add_host tifmxx: Unknown symbol tifmxx_mmcsd_wait_for_af tifmxx: Unknown symbol scsi_host_alloc tifmxx: Unknown symbol __scsi_add_device tifmxx: Unknown symbol scsi_remove_host tifmxx: Unknown symbol pci_intx tifmxx: Unknown symbol tifmxx_mmcsd_wait_for_ae tifmxx: Unknown symbol scsi_host_put tifmxx: Unknown symbol tifmxx_mmcsd_wait_for_brs tifmxx: Unknown symbol tifmxx_mmcsd_wait_for_card tifmxx: Unknown symbol scsi_add_host tifmxx: Unknown symbol tifmxx_mmcsd_wait_for_af tifmxx: Unknown symbol scsi_host_alloc tifmxx: Unknown symbol __scsi_add_device
Trawling mailing-lists I found that "pci_intx" wasn't implemented by the kernel in version 2.6.11-1.1369 but it is in later releases like 2.6.14-1.1656 which I also tested with. To workaround this in 2.6.11-1.1369 the recommendation was to add the following code to the top of tifmxx_hw.c. [cpp]static void pci_intx(struct pci_dev *pdev, int enable) { u16 pci_command, new; pci_read_config_word(pdev, PCI_COMMAND, &pci_command); if (enable) new = pci_command & ~PCI_COMMAND_INTX_DISABLE; else new = pci_command | PCI_COMMAND_INTX_DISABLE; if (new != pci_command) pci_write_config_word(pdev, PCI_COMMAND, pci_command); }[/cpp] Although this avoided the pci_intx problem the others remained, probably down to SCSI not being enabled in the Fedora Core 4 standard kernel; the missing tifmxx_ symbols simply aren't implemented yet. Rebuilding it without the pci_intx hack on my 2.6.14-1.1659 kernel appeared to be a lot better, looks promising. tifmxx: Unknown symbol scsi_remove_host tifmxx: Unknown symbol scsi_add_device tifmxx: Unknown symbol tifmxx_mmcsd_wait_for_ae tifmxx: Unknown symbol scsi_host_put tifmxx: Unknown symbol tifmxx_mmcsd_wait_for_brs tifmxx: Unknown symbol tifmxx_mmcsd_wait_for_card tifmxx: Unknown symbol scsi_add_host tifmxx: Unknown symbol tifmxx_mmcsd_wait_for_af tifmxx: Unknown symbol scsi_host_alloc
After my recent success with ndiswrapper I decided to give it a bash using some Windows x64 drivers I found while trawling the net. It appears to be an official release for Windows x64 labelled "TI 7x21 FlashMedia/SD Host controller driver -Win64", "version 2.0.0.0", "build id FBCRX02W" - but I found no mention of it on their website - download it here. ndiswrapper -i tifm21.inf modprobe ndiswrapper
returned: ndiswrapper (import:239): unknown symbol: ntoskrnl.exe:'ExReleaseFastMutex' ndiswrapper (import:239): unknown symbol: ntoskrnl.exe:'ExAcquireFastMutex' ndiswrapper (import:239): unknown symbol: ntoskrnl.exe:'IoUnregisterPlugPlayNotification' ndiswrapper (import:239): unknown symbol: ntoskrnl.exe:'IoGetDmaAdapter' ndiswrapper (import:239): unknown symbol: ntoskrnl.exe:'KeLeaveCriticalRegion' ndiswrapper (import:239): unknown symbol: ntoskrnl.exe:'KeEnterCriticalRegion' ndiswrapper (import:239): unknown symbol: ntoskrnl.exe:'IoGetDeviceObjectPointer' ndiswrapper (import:239): unknown symbol: ntoskrnl.exe:'IoRegisterPlugPlayNotification' ndiswrapper (load_sys_files:218): couldn't prepare driver 'tifm21' ndiswrapper (load_wrap_driver:112): loadndiswrapper failed (65280); check system log for messages from 'loadndisdriver'
Game Over... It was a long shot anyway... I have emailed Everest and will try calling them tomorrow, failing that I might try give TI a call, the binary kernel module is labelled as GPL so the source must be available in some form. Other than that I will be keeping an eye on the progress over at tifmxx.berlios.de One day... maybe it will all just work... Ah yes, just for completeness... Here is a lspci dump: 03:04.0 CardBus bridge: Texas Instruments PCIxx21/x515 Cardbus Controller Subsystem: Hewlett-Packard Company: Unknown device 3085 Flags: bus master, medium devsel, latency 168, IRQ 185 Memory at b0209000 (32-bit, non-prefetchable) [size=4K] Bus: primary=03, secondary=04, subordinate=07, sec-latency=176 Memory window 0: 30000000-31fff000 (prefetchable) Memory window 1: 32000000-33fff000 I/O window 0: 0000a400-0000a4ff I/O window 1: 0000a800-0000a8ff 16-bit legacy interface ports at 0001
03:04.3 Mass storage controller: Texas Instruments PCIxx21 Integrated FlashMedia Controller Subsystem: Hewlett-Packard Company: Unknown device 3085 Flags: bus master, medium devsel, latency 64, IRQ 10 Memory at b0206000 (32-bit, non-prefetchable) [size=8K] Capabilities: [44] Power Management version 2
03:04.4 Class 0805: Texas Instruments PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Secure Digital (SD) Controller Subsystem: Hewlett-Packard Company: Unknown device 3085 Flags: bus master, medium devsel, latency 64, IRQ 10 Memory at b020a000 (32-bit, non-prefetchable) [size=256] Memory at b0208c00 (32-bit, non-prefetchable) [size=256] Memory at b0208800 (32-bit, non-prefetchable) [size=256] Capabilities: [80] Power Management version 2
UPDATE: I just got a response from Everest
This is a custom project done for Texas instruments and not open source. Any queries regarding this driver should be addressed to TI.
Related Posts
Update: TI 7×21 FlashMedia/SD Host Controller (104C:8033 & 104C:8034)
Bit of an update, my previous post is now getting a significant amount of traffic; in fact it’s my hottest post yet!
Sitecom CN-502 USB Bluetooth Dongle works on Linux
To my absolute surprise, the Sitecom CN-502 USB Bluetooth Dongle works perfectly with out-of-the-box Fedora Core 4 x8664.
Broadcom BCM4318 PCI id 14E4:4318 Wireless Adapter
In my previous post I mentioned that I got the wireless adapter in my Compaq R4100 series laptop working with ndiswrapper.