Experimental driver for Ricoh Bay1Controller SD Card readers

From: Sascha Sommer
Date: Sat Jan 06 2007 - 19:15:55 EST


Hi,

Attached is a very experimental driver for a Ricoh SD Card reader that can be
found in some notebooks like the Samsung P35.

Whenever a sd card is inserted into one of these notebooks, a virtual pcmcia
card will show up:

Socket 0:
product info: "RICOH", "Bay1Controller", "", ""
manfid: 0x0000, 0x0000

In order to write this driver I hacked qemu to have access to the cardbus
bridge containing this card. I then logged the register accesses of the
windows xp driver and tryed to analyse them.

As the meanings of most of the register are still unknown to me, I consider
this driver very experimental. It is possible that this driver might destroy
your data or your hardware. Use at your own risk!

Other problems:
- I only implemented reading support
- I only tested with a 128 MB SD card, no idea what would be needed to support
other card types
- irqs are not supported
- dma is not supported
- it is very slow
- the registers can be found on the cardbus bridge and not on the virtual
pcmcia card. The cardbus bridge is already claimed by yenta_socket.
Therefore the driver currently uses pci_find_device to find the cardbus
bridge containing the sd card reader registers.
- it will probably crash when you remove the sd card without unmounting first
- the ios stuff is not really understood
- there are a bunch of extra MMC_APP_CMDs inside the driver
- only tested with kernel 2.6.18

apart from all these problems reading an image from my sd card seems to have
worked ;)

If you are still brave enough to try it out make at least a backup of the data
on your sd card.

Feedback is highly appreciated.

Regards

Sascha

KERNEL_VERSION = $(shell uname -r)
KERNEL_DIR = /lib/modules/$(KERNEL_VERSION)/build
MDIR = /lib/modules/$(KERNEL_VERSION)/kernel/drivers/mmc

obj-m += sdricoh_cs.o

default:
$(MAKE) -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules

install:
if test ! -d $(MDIR) ; then mkdir -p $(MDIR) ; fi
install -D -m 644 *.ko $(MDIR)
depmod -a

clean:
rm -f *.o *.ko *.mod.c .*o.cmd .*o.d .*o.flags
rm -rf .tmp_versions

Attachment: sdricoh_cs.c.gz
Description: GNU Zip compressed data