# [Howto] SDHCI

## artic

Hola ,antes de nada agradecer a Pierre Ossman el trabajo realizado , y que tantos agradecemos.

Manual para kernel 2.6.28 a 2.6.24 (testeado y comprobado con el 2.6.28 ) 

(testeado con portatil Sony-Vaio FZ21E )

Bueno , como comprendereis han cambiado algunas cosas en el kernel , y este driver no ha sido diferente.

Tecleamos como root :

```
#lspci
```

```
09:03.0 CardBus bridge: Texas Instruments PCIxx12 Cardbus Controller

09:03.1 FireWire (IEEE 1394): Texas Instruments PCIxx12 OHCI Compliant IEEE 1394 Host Controller

09:03.2 Mass storage controller: Texas Instruments 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)

```

Nos aparece la famosa controladora de texas instruments que montan muchos portátiles , lo más importante aqui para identificar el driver es que aparezca PCIxx12 , ya que segun lo que aparezca el proceder es diferente.

Vamos ahora al kernel :

```
Device Drivers  --->

    [m] Misc devices  --->

        <m>   TI Flash Media interface support

        <m>     TI Flash Media PCI74xx/PCI76xx host adapter support

    <m> MMC/SD card support  --->

        <m>   TI Flash Media MMC/SD Interface support
```

```
Device Drivers  --->

    <m> MMC/SD card support  --->

        <m>   Secure Digital Host Controller Interface support

```

Seleccionamos todo como módulos , no compilar directamente en el kernel  o no funcionará ,es importante tener esto claro.

Una vez realizado esto no hace falta recompilar el kernel , salvo que aprovechásemos para hacer más cambios y compilásemos algo directamente en el.

```
make modules
```

```
make modules_install
```

Ya tenemos nuestros nuevos módulos listos para cargar.

Ahora  necesitamos editar un archivo de configuración para que nos cargue un módulo automaticamente (debería de hacerlo udev por si solo pero en la realidad no es asi )

```
echo "mmc_block" >>  /etc/modules.autoload.d/kernel-2.6
```

```
echo "tifm_core" >>  /etc/modules.autoload.d/kernel-2.6
```

```
echo "tifm_7xx1" >>  /etc/modules.autoload.d/kernel-2.6
```

es importante respetar el orden de carga de los módulos.......

Ahora necesitamos bloquear 1 módulos en el momento del arranque , sino hacemos esto no funcionará :

```
echo "blacklist tifm_sd" >>  /etc/modules.d/blacklist
```

el módulo se cargará cuando insertemos la tarjeta en la ranura ( si se carga en el arranque no detecta la tarjeta aunque lo carguemos el último ), esto no debería de ser asi ,pero en mi caso es el unico modo de que funcione .

Bien , ahora procederemos a reiniciar , y una vez estemos logueados insertamos la tarjeta SD :

```
tifm_core: MMC/SD card detected in socket 0:1

[ 2082.205568] mmc0: new SD card at address b368

[ 2082.205766] mmcblk0: mmc0:b368 SDC   121 MiB

[ 2082.205820]  mmcblk0: p1

```

Como veis en el dmesg funciona perfectamente , en mi caso he configurado mi kde 4 para que me lo monte automaticamente .Si quereis hacerlo de forma manual , teneis que editar el /etc/fstab con nano por ej :

```
/dev/mmcblk0p1          /mnt/sd         vfat            noauto,rw,users  0 0
```

y crear el punto de montaje por ej :

```
mkdir /mnt/sd
```

ya está todo listo , podeis montar vuestras tarjetas SD en vuestro linux.

Si no funciona probad a cambiar :

```
setpci -s 09:03.2 4c=0x02
```

 o 

```
setpci -s 09:03.2 4c=0x22
```

 sino funciona dejad el que venia predeterminado en mi caso 

```
setpci -s 09:03.2 4c=0x44
```

esto varia según cada placa , para obtener los datos del comando hacer un 

```
lspci -xxx
```

 y os saldrá algo como esto :

```
09:03.2 Mass storage controller: Texas Instruments 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)

00: 4c 10 3b 80 06 01 10 02 00 00 80 01 10 39 80 00

10: 00 10 10 fc 00 00 00 00 00 00 00 00 00 00 00 00

20: 00 00 00 00 00 00 00 00 00 00 00 00 4d 10 05 90

30: 00 00 00 00 44 00 00 00 00 00 00 00 07 03 07 04

40: 00 00 00 00 01 00 02 7e 00 80 00 00 44 00 00 00

50: 4d 10 05 90 05 01 00 00 00 00 00 00 00 00 00 00

60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

```

donde 5 fila 14 columna es el valor que hemod de modificar , en este caso es el número 44 , el otro dato que necesitamos es la cifra que va antes del 

```
Mass storage controller
```

 lo digo porque muchos haceis copy paste en los howto y hay variables que no son iguales en todos los equipos.

Recordad que en esta versión del driver no debería de hacer falta cambiar registros con setpci , como se muestra en el manual antiguo , cuidado con lo que cambiais ,recordad que los cambios con setpci permancen con los reinicios , si os olvidasteis del valor original apagad y volver a arrancar el PC.Tambien recordad que el cambiar el registro con setpci activa el modo sdhci exclusivamente .

--------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------

Manual para kernel inferiores a 2.6.24

(testeado con portatil toshiba satellite A80)

Una aclaracion este driver funciona con portatiles que monten controladoras texas instruments y ricoh.

A partir del kernel 2.6.17 no es necesareo parchear

Para comenzar nos bajamos los 3 parches de :

http://list.drzeus.cx/pipermail/sdhci-devel/2006-February/000426.html

Lo segundo sera parchear nuestro kernel (para quien no sepa parchear es muy sencillo) ,nos vamos al directorio /usr/src/linux y tecleamos lo siguiente:

```
patch -p1 < /ruta/del/parche 
```

y hacemos eso con los parches que nos hemos descargado

luego tenemos que configurar nuestro kernel y habilitar los modulos para poder compilarlos,nos vamos a :

DEVICES DRIVERS buscas MMC/SD CARD SUPPORT ,logicamente debes de habilitar el que necesites ,que se supone que debe de ser SECURE DIGITAL HOST CONTROLLER que es el que hemos añadido con el parche.Los compilamos como modulos y si quieres opcion de debug pues tb.

Una vez efectuado esto guardamos los cambios y compilamos el kernel.

Hacemos un make modules_install ,metemos imagen en /boot (bueno lo de siempre)

Y arrancamos ........ como vereis 2 modulos se cargan ya en el arranque,y si no fuese asi pues los insertamos:

```
modprobe mmc_core sdhci mmc_block
```

este ultimo es importante y no se inserta solo.Si no lo insertamos no tendremos los nodos en /dev ya que Udev no los creara............

una vez realizado comprobamos con un :

```
# lsmod

Module                  Size  Used by

mmc_block               6664  0

sdhci                  12800  0

mmc_core               18688  2 mmc_block,sdhci

```

todo esta OK

Lo siguiente es para los que tenemos  Texas Instruments (TI)

ahora hacemos un :

```
lspci -xxx
```

y no saldra algo como esto:

```
0000:06:04.3 Mass storage controller: Texas Instruments PCIxx21 Integrated FlashMedia Controller

00: 4c 10 33 80 06 00 10 02 00 00 80 01 08 39 80 00

10: 00 40 00 b4 00 00 00 00 00 00 00 00 00 00 00 00

20: 00 00 00 00 00 00 00 00 00 00 00 00 79 11 01 ff

30: 00 00 00 00 44 00 00 00 00 00 00 00 0a 02 07 04

40: 00 00 00 00 01 00 02 7e 00 00 00 00 20<-- 00 00 00

50: 79 11 01 ff 05 01 00 00 00 00 00 00 00 00 00 00

60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
```

bueno pues esto puede variar en cada caso ,antes de nada nosotros necesitamos conocer el valor actual del reg,esta en subfuncion 3 en offset 4C :

```

0: 00 00 00 00 01 00 02 7e 00 00 00 00 [b]20[/b] 00 00 00
```

El bit que queremos cambiar es 2 ,entonces cambiamos lo de arriba por 22 de la siguiente manera :

```
setpci -s 06:04.3 4c=0x22 
```

si volvemos a teclear :

```
lspci -xxx
```

 nos saldra esto:

```
00: 4c 10 33 80 06 00 10 02 00 00 80 01 08 39 80 00

10: 00 40 00 b4 00 00 00 00 00 00 00 00 00 00 00 00

20: 00 00 00 00 00 00 00 00 00 00 00 00 79 11 01 ff

30: 00 00 00 00 44 00 00 00 00 00 00 00 0a 02 07 04

40: 00 00 00 00 01 00 02 7e 00 00 00 00 22<-- 00 00 00

50: 79 11 01 ff 05 01 00 00 00 00 00 00 00 00 00 00

60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
```

bien observamos que ha cambiado  :Wink: 

ahora insertamos una tarjeta en la unidad y nos fijamos que en /dev tenemos creados los siguientes /dev:

```
/dev/mmcblk0 /dev/mmcblk0p1
```

pues nada montamos la unidad :

```
mount /dev/mmcblk0p1 /mnt/flash -t vfat 
```

y ya tendremos nuestro unidad montada y lista para usarse.

Este driver ha sido probado con exito en un toshiba satellite a80,con un kernel 2.6.15-r2.

El driver esta disponible sin necesidad de parchear en los ultimos kernel a partir del 2.6.17 en adelante.

FAQ

Es necesario ejecutar 

```
setpci -s 06:04.3 4c=0x22
```

 con TI en cada sesion???

Si es necesario ,pero lo podeis meter en 

```
/etc/conf.d/local.start
```

No soi capaz de montarlo como usuario

Debes editar tu 

```
/etc/fstab
```

 y añadir lo siguiente 

```
/dev/mmcblk0p1          /mnt/sd         vfat            noauto,rw,users  0 0
```

 el punto de montaje es a gusto de cada uno.

Espero haberos ayudado   :Wink: 

----------

## zorth

hola.

bueno, tan solo comentar, que tras darle soporte al nucleo en las tipicas opciones sobre usb y emulacion scsi, yo tengo montado como /dev/sdX, las 4 ranuras y los tipos de tarjetas soportados sin problema alguno ( SD, MMC, MS, SM, CF ) que son las que tienen mi hardcano13 y como digo, tan solo he de insertar una tarjeta como la mmc de mi nokia, como si pongo el pendrive de 128 mbs, tanto da y hacer un dmesg para ver donde esta asignada... si /dev/sdc, /dev/sdd, /dev/sdb.... el que sea. mount -t vfat /dev/sdX /mnt/sdX y ya esta todo.

```

  Vendor: Generic   Model: STORAGE DEVICE    Rev: 9144

  Type:   Direct-Access                      ANSI SCSI revision: 00

sd 2:0:0:0: Attached scsi removable disk sdb

sd 2:0:0:0: Attached scsi generic sg1 type 0

  Vendor: Generic   Model: STORAGE DEVICE    Rev: 9144

  Type:   Direct-Access                      ANSI SCSI revision: 00

sd 2:0:0:1: Attached scsi removable disk sdc

sd 2:0:0:1: Attached scsi generic sg2 type 0

  Vendor: Generic   Model: STORAGE DEVICE    Rev: 9144

  Type:   Direct-Access                      ANSI SCSI revision: 00

sd 2:0:0:2: Attached scsi removable disk sdd

sd 2:0:0:2: Attached scsi generic sg3 type 0

  Vendor: Generic   Model: STORAGE DEVICE    Rev: 9144

  Type:   Direct-Access                      ANSI SCSI revision: 00

sd 2:0:0:3: Attached scsi removable disk sde

sd 2:0:0:3: Attached scsi generic sg4 type 0

usb-storage: device scan complete

```

no se si sera lo mismo al howto.... pero bueno  :Smile: 

saludos.

----------

## Tambor

Buenas prove lo que decias pero no me ha funcionado, te pongo un poco de informacion:

parchee el kernel como dijiste, hasta aquí ningún problema, luego con 

```

lspci -xxx

02:0d.0 System peripheral: Toshiba America Info Systems SD TypA Controller (rev 03)

00: 79 11 05 08 02 00 10 02 03 00 80 08 00 00 00 00

10: 00 7c ef fc 00 00 00 00 00 00 00 00 00 00 00 00

20: 00 00 00 00 00 00 00 00 00 00 00 00 79 11 01 00

30: 00 00 00 00 80 00 00 00 00 00 00 00 0b 01 00 00

40: 00 00 00 00 37 5f 00 00 00 00 00 00 02 00 00 00

50: 01 00 00 00 00 00 00 00 02 01 00 00 00 00 00 00

60: 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

80: 01 00 02 fe 00 80 00 00 02 02 00 00 00 00 00 00

90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

f0: 00 00 00 00 00 ff 00 00 00 01 00 00 00 00 00 00

```

Por lo qual vi que no tengo una controladora TI sino que la controladora es de toshiba, pero vi en el help del parche del kernel, que se supone que la controladora de toshiba esta suportada.

La cosa esta que como es normal no puedo modificar el valor del registro asi como asi sin saber que toco, admas los valores no coinciden con los de la TI. I si miro si se han creado los /dev veo que no ha passado, al igual como al hacer dmesg no me da ninguna informacion de que entre ninguna tarjeta SD.

Alguien sabe de algo relacionado?

----------

## artic

Hola, este driver es para lectoras de portatiles integradas para controladoras texas y ricoh,que utilizan interface sdhci.Las usb no tienen nada que ver,se configuran de manera distinta y se montan como dispositivos scsi.Las Usb hace años que estan soportadas,y ya hay howto al respecto .

salu2

----------

## artic

Hola tambor ,tu controladora no es de Texas instruments ,como la de mi toshiba .Que portatil tienes???? que tipo de bios tiene pheonix?????Que kernel usas???

Hecha un vistazo aqui :

http://mmc.drzeus.cx/wiki/Controllers/SDHCI aunque creo que va ser que no

Este driver soporta ricoh y texas instruments ,y fuera de ahi nada mas que yo sepa.Estas controladoras estan presentes en portatiles toshiba,dell,etc.....

Creo haber leido que para las controladoras toshiba no hay proyecto,ya que toshiba se niega a dar especificaciones de su hardware.

salu2

----------

## Tambor

Haver,

ordenador: Toshiba Satellite 2450-s203

bios: ACPI BIOS version 1.30

kernel: linux-2.6.15-gentoo-r1 de gentoo-sources

Por lo que veo en la pàgina no se comenta nada de Toshiba

en la informacion de Secure Digital Host Controller Interface support  (EXPERIMENTAL) sale:

```

CONFIG_MMC_SDHCI:

  x This select the generic Secure Digital Host Controller Interface.

  x It is used by manufacturers such as Texas Instruments(R), Ricoh(R)  

  x and Toshiba(R). Most controllers found in laptops are of this type.

  x If you have a controller with this interface, say Y or M here.   

```

Por lo que si habla de toshiba, pero no se especifica que controladoras.

No se si alguien sabe algo más que informe.

----------

## artic

Hola ,has probado a saltarte ese paso ya que al no tener una TI no es necesareo .Los dev se crean al meter la tarjeta,pero si el dmesg no es cupe nada mal asunto.

Mi dmesg suelta esto:

```
sdhci: Secure Digital Host Controller Interface driver, 0.10

sdhci: Copyright(c) Pierre Ossman

sdhci [sdhci_probe()]: found at 0000:06:04.4

sdhci [sdhci_probe()]: found 3 slot(s)

ACPI: PCI Interrupt 0000:06:04.4[D] -> GSI 19 (level, low) -> IRQ 19

sdhci [sdhci_probe_slot()]: slot 0 at 0xb4009000, irq 19

sdhci: ============== REGISTER DUMP ==============

sdhci: Sys addr: 0x00000000 | Version:  0x00008400

sdhci: Blk size: 0x00000000 | Blk cnt:  0x00000000

sdhci: Argument: 0x00000000 | Trn mode: 0x00000000

sdhci: Present:  0x00020000 | Host ctl: 0x00000000

sdhci: Power:    0x00000000 | Blk gap:  0x00000000

sdhci: Walk up:  0x00000000 | Clock:    0x00000002

sdhci: Timeout:  0x0000000e | Int stat: 0x00000000

sdhci: Int enab: 0x11ff00cf | Sig enab: 0x11ff00cf

sdhci: AC12 err: 0x00000000 | Slot int: 0x00000000

sdhci: Caps:     0x01821090 | Max curr: 0x00000000

sdhci: ===========================================

sdhci [sdhci_set_ios()]: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0

sdhci [sdhci_set_ios()]: clock 0Hz busmode 1 powermode 1 cs 0 Vdd 21 width 0

mmc0: SDHCI at 0xb4009000 irq 19 PIO

sdhci [sdhci_probe_slot()]: slot 1 at 0xb4008c00, irq 19

sdhci [sdhci_set_ios()]: clock 62500Hz busmode 1 powermode 2 cs 0 Vdd 21 width 0

sdhci: ============== REGISTER DUMP ==============

sdhci: Sys addr: 0x00000000 | Version:  0x00008400

sdhci: Blk size: 0x00000000 | Blk cnt:  0x00000000

sdhci: Argument: 0x00000000 | Trn mode: 0x00000000

sdhci: Present:  0x00020000 | Host ctl: 0x00000000

sdhci: Power:    0x00000000 | Blk gap:  0x00000000

sdhci: Walk up:  0x00000000 | Clock:    0x00000002

sdhci: Timeout:  0x0000000e | Int stat: 0x00000000

sdhci: Int enab: 0x11ff00cf | Sig enab: 0x11ff00cf

sdhci: AC12 err: 0x00000000 | Slot int: 0x00000000

sdhci: Caps:     0x01821090 | Max curr: 0x00000000

sdhci: ===========================================

sdhci [sdhci_set_ios()]: clock 62500Hz busmode 1 powermode 2 cs 1 Vdd 21 width 0

sdhci [sdhci_set_ios()]: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0

MMC: starting cmd 00 arg 00000000 flags 00000000

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (0)

MMC: req done (00): 1: 00000000 00000000 00000000 00000000

sdhci [sdhci_set_ios()]: clock 62500Hz busmode 1 powermode 2 cs 0 Vdd 21 width 0

MMC: starting cmd 37 arg 00000000 flags 00000029

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)

MMC: req done (37): 1: 00000000 00000000 00000000 00000000

MMC: starting cmd 37 arg 00000000 flags 00000029

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)

MMC: req done (37): 1: 00000000 00000000 00000000 00000000

MMC: starting cmd 37 arg 00000000 flags 00000029

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)

MMC: req done (37): 1: 00000000 00000000 00000000 00000000

MMC: starting cmd 37 arg 00000000 flags 00000029

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)

MMC: req done (37): 1: 00000000 00000000 00000000 00000000

MMC: starting cmd 01 arg 00000000 flags 00000001

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (1)

MMC: req done (01): 1: 00000000 00000000 00000000 00000000

sdhci [sdhci_set_ios()]: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0

sdhci [sdhci_set_ios()]: clock 0Hz busmode 1 powermode 1 cs 0 Vdd 21 width 0

mmc1: SDHCI at 0xb4008c00 irq 19 PIO

sdhci [sdhci_probe_slot()]: slot 2 at 0xb4008800, irq 19

sdhci: ============== REGISTER DUMP ==============

sdhci: Sys addr: 0x00000000 | Version:  0x00008400

sdhci: Blk size: 0x00000000 | Blk cnt:  0x00000000

sdhci: Argument: 0x00000000 | Trn mode: 0x00000000

sdhci: Present:  0x000a0000 | Host ctl: 0x00000000

sdhci: Power:    0x00000000 | Blk gap:  0x00000000

sdhci: Walk up:  0x00000000 | Clock:    0x00000002

sdhci: Timeout:  0x0000000e | Int stat: 0x00000000

sdhci: Int enab: 0x11ff00cf | Sig enab: 0x11ff00cf

sdhci: AC12 err: 0x00000000 | Slot int: 0x00000000

sdhci: Caps:     0x01821898 | Max curr: 0x00000000

sdhci: ===========================================

sdhci [sdhci_set_ios()]: clock 62500Hz busmode 1 powermode 2 cs 0 Vdd 21 width 0

sdhci [sdhci_set_ios()]: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0

sdhci [sdhci_set_ios()]: clock 62500Hz busmode 1 powermode 2 cs 1 Vdd 21 width 0

mmc2: SDHCI at 0xb4008800 irq 19 PIO

MMC: starting cmd 00 arg 00000000 flags 00000000

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (0)

MMC: req done (00): 1: 00000000 00000000 00000000 00000000

sdhci [sdhci_set_ios()]: clock 62500Hz busmode 1 powermode 2 cs 0 Vdd 21 width 0

MMC: starting cmd 37 arg 00000000 flags 00000029

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)

MMC: req done (37): 1: 00000000 00000000 00000000 00000000

MMC: starting cmd 37 arg 00000000 flags 00000029

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)

MMC: req done (37): 1: 00000000 00000000 00000000 00000000

MMC: starting cmd 37 arg 00000000 flags 00000029

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)

MMC: req done (37): 1: 00000000 00000000 00000000 00000000

MMC: starting cmd 37 arg 00000000 flags 00000029

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)

MMC: req done (37): 1: 00000000 00000000 00000000 00000000

MMC: starting cmd 01 arg 00000000 flags 00000001

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (1)

MMC: req done (01): 1: 00000000 00000000 00000000 00000000

sdhci [sdhci_set_ios()]: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0

sdhci [sdhci_set_ios()]: clock 0Hz busmode 1 powermode 1 cs 0 Vdd 21 width 0

sdhci [sdhci_set_ios()]: clock 93750Hz busmode 1 powermode 2 cs 0 Vdd 21 width 0

sdhci [sdhci_set_ios()]: clock 93750Hz busmode 1 powermode 2 cs 1 Vdd 21 width 0

MMC: starting cmd 00 arg 00000000 flags 00000000

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (0)

MMC: req done (00): 1: 00000000 00000000 00000000 00000000

sdhci [sdhci_set_ios()]: clock 93750Hz busmode 1 powermode 2 cs 0 Vdd 21 width 0

MMC: starting cmd 37 arg 00000000 flags 00000029

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)

MMC: req done (37): 1: 00000000 00000000 00000000 00000000

MMC: starting cmd 37 arg 00000000 flags 00000029

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)

MMC: req done (37): 1: 00000000 00000000 00000000 00000000

MMC: starting cmd 37 arg 00000000 flags 00000029

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)

MMC: req done (37): 1: 00000000 00000000 00000000 00000000

MMC: starting cmd 37 arg 00000000 flags 00000029

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)

MMC: req done (37): 1: 00000000 00000000 00000000 00000000

MMC: starting cmd 01 arg 00000000 flags 00000001

sdhci [sdhci_tasklet_finish()]: Ending request, cmd (1)

MMC: req done (01): 1: 00000000 00000000 00000000 00000000

sdhci [sdhci_set_ios()]: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0
```

lo de la ayuda del kernel estoi de acuerdo contigo,ya que aunque mi portatil sea toshiba lleva controladora texas y no toshiba como el tuyo.Creo que dentro de toshiba se montan diferentes tipos de controladoras,si mal no he leido unas utilizan el bus pcmcia y otras no.De ahi que no todas esten soportadas.

salu2

----------

## Tambor

Pues no el dmesg lamentablemente no escupe nada, o sea que mal lo veo. I por lo que a /dev creados pues tampoco como es normal, sino ya me informaria de ello.

Bueno veo que tocara esperar, o desear que toshiba sea más generosa.

----------

## artic

Bueno creo haber leido por aquella pagina que hay mas gente desarrollando drivers.Estoi un poco cansado de que cuando vas a las paginas de los fabricantes de portatiles te recomienden o diseñen los equipos para el XP.Ademas de que imagino que la licencia que va pegada debajo del portatil nos la cobran en el precio.Deberian dar la posibilidad de elegir.Otras marcas minoritarias si lo hacen ,pero sus equipos fallan mas que escopetas de feria.

salu2

----------

## artic

Actualizado a version 0.11

 :Wink: 

El driver esta ya en las mm-sources a partir de la 2.6.16-rc6-mm2 en adelante.......... es interesante ya que han añadido un driver para escribir el doble de rapido.

Salu2

----------

## artic

A partir de la version 2.6.17 no hace falta parchear el kernel .

Salu2

----------

## dmery

Artic,

Tengo el kernel 2.6.17-gentoo-r4, en el cual habilite (*) los siguientes:

(*) MMC support

(*) MMC block device driver 

(*) Secure Digital Host Controller Interface support  (EXPERIMENTAL)

luego realizo el lspci -xxx y modifico el valor 20 a 22, como bien explicas en tu howto, pero nada (intento colocar un memory stick de 4 mb Sony, cuando cargo la particion windows funciona perfecto, por lo cual descarto problemas de hard)

el dmesg me tira lo siguiente en la parte referida a los drivers:

sdhci: Secure Digital Host Controller Interface driver, 0.11

sdhci: Copyright(c) Pierre Ossman

GSI 22 sharing vector 0xE9 and IRQ 22

ACPI: PCI Interrupt 0000:03:04.4[D] -> GSI 23 (level, low) -> IRQ 233

mmc0: SDHCI at 0xb0209000 irq 233 PIO

mmc1: SDHCI at 0xb0208c00 irq 233 PIO

mmc2: SDHCI at 0xb0208800 irq 233 PIO

te envio la salida del lspci

linuxfour linux # lspci

00:00.0 Host bridge: ATI Technologies Inc RS480 Host Bridge

00:01.0 PCI bridge: ATI Technologies Inc Unknown device 5a3f

00:04.0 PCI bridge: ATI Technologies Inc Unknown device 5a36

00:13.0 USB Controller: ATI Technologies Inc IXP SB400 USB Host Controller

00:13.1 USB Controller: ATI Technologies Inc IXP SB400 USB Host Controller

00:13.2 USB Controller: ATI Technologies Inc IXP SB400 USB2 Host Controller

00:14.0 SMBus: ATI Technologies Inc IXP SB400 SMBus Controller (rev 10)

00:14.1 IDE interface: ATI Technologies Inc Standard Dual Channel PCI IDE Controller ATI

00:14.3 ISA bridge: ATI Technologies Inc IXP SB400 PCI-ISA Bridge

00:14.4 PCI bridge: ATI Technologies Inc IXP SB400 PCI-PCI Bridge

00:14.5 Multimedia audio controller: ATI Technologies Inc IXP SB400 AC'97 Audio Controller (rev 01)

00:14.6 Modem: ATI Technologies Inc ATI SB400 - AC'97 Modem Controller (rev 01)

00:18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration

00:18.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map

00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller

00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control

01:05.0 VGA compatible controller: ATI Technologies Inc ATI Radeon XPRESS 200M 5955 (PCIE)

03:00.0 FireWire (IEEE 1394): Texas Instruments TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)

03:02.0 Network controller: Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller (rev 03)

03:04.0 CardBus bridge: Texas Instruments PCIxx21/x515 Cardbus Controller

03:04.3 Mass storage controller: Texas Instruments PCIxx21 Integrated FlashMedia Controller

03:04.4 Class 0805: Texas Instruments PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Secure Digital (SD) Controller

03:06.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)

linuxfour linux #

pero no puedo ponerla a funcionar, lo mismo me paso con el kernel 2.6.15-gentoo-r9 y los "parches" agregados, no hay forma.

Tienes alguna idea ??? me he salteado algun paso ???   :Evil or Very Mad:   :Question: 

Te agradezco cualquier ayuda que me puedas brindar  :Idea: 

Salu2

Daniel Mery  :Very Happy: 

----------

## capira

Antes de nada quiero dar las gracias a artic por su mini howto.

Lo he seguido y casi sin problema he conseguido leer una tarjeta MMC.

Sin embargo me quedan algunas dudas sin resolver:

Cada vez que reinicio tengo que ejecutar setpci. ¿Hay alguna forma de evitar esto?

No he conseguido leer tarjetas XD o MS

¿Es posible conseguir un comportamiento igual que cuando inserto mi pendrive de manera que se me pregunte si quiero montar mi unidad?

Para dmery, ¿puedes pegar lo que te sale al ejecutar lsmod | grep -e sd -e mmc?

----------

## capira

Por cierto, mi configuración es:

Hardware: Portatil Toshiba Satellite M40-285

Kernel: 2.6.17-gentoo-r5

----------

## dmery

capira, gracias por tu ayuda,

aqui va la salida

[root@gentoo]: ~ # lsmod | grep -e sd -e mmc

sdhci                       12416  0

mmc_core               19288  1 sdhci

Te comento -por si te sirve- que para el setpci construi un "alias" y es mas facil. Ya que segun el mini howto de Artic hay que realizarlo cada vez "levantas" el sistema.

un salu2

Daniel Mery  :Very Happy: 

----------

## capira

 *dmery wrote:*   

> capira, gracias por tu ayuda,
> 
> aqui va la salida
> 
> [root@gentoo]: ~ # lsmod | grep -e sd -e mmc
> ...

 

Vale, era lo que me suponÃ­a. A mi me ha pasado lo mismo al principio. En algÃºn punto del post inicial, artic dice que hay que cargar el mÃ³dulo mmc_block. Dice que no se carga por defecto. Una vez echo esto, mira a ver si necesitas utilizar le comando setpci, pero asegurate del que el id del dispositivo, estÃ¡ bien escrito, que yo he estado a punto de liarla: *Quote:*   

> # lspci -xxx
> 
> ...
> 
> 06:06.3 Mass storage controller: Texas Instruments PCIxx21 Integrated FlashMedia Controller
> ...

 

----------

## dmery

Capira,

Correcto ya realice: modprobe mmc_block,

 la salida es:

[root@gentoo]: ~ # lsmod | grep -e sd -e mmc

mmc_block               6792  0

sdhci                        12416  0

mmc_core               19288  2 mmc_block,sdhci

respecto a setpci:

[root@gentoo]: ~ # lspci -xxx

[b]03:04.3 Mass storage controller: Texas Instruments PCIxx21 Integrated FlashMedia Controller

........

40: 00 00 00 00 01 00 02 7e 00 00 00 00 22 00 00 00

........

o sea que ahora esta todo  bien, pero cuando coloco un memory stick en dispositivo lector multiple "no pasa nada". Realmente no se si puede leer este tipo de "memory-stick". Pasa que con el mismo equipo en una particion Ubuntu lee perfectamente este "stick memory" en el "sd-card reader"; igual que la particion Guin2. Mi pregunta seria tu puedes leer este tipo de "memory stick" ?

Gracias por tu ayuda

Salu2

Daniel Mery   :Very Happy: 

----------

## pcmaster

dmery: si puedes leer una tarjeta mmc/sd pero no una en otro slot, puede ser que no tengas activado el soporte para LUN mÃºÄºtiple en el kernel.

Normalmente, cada dispositivo scsi contiene un sÃ³lo disco, con una tabla de particiones, por lo que esa opciÃ³n no hace falta activarla, pero en el caso de los lectores mÃºltiples de tarjetas, hay un sÃ³lo dispositivo, donde cada slot se comporta como una unidad de disco independiente con su propia tabla de particiones, por lo que debes activarla.

Si os liÃ¡is con los nombres de los dispositivos, y tenÃ©is udev, podÃ©is mirar en /dev/disk a ver si se os crean automÃ¡ticamente nombres permanentes. por ejemplo, con mi lector compacto de tarjetas (con dos ranuras), se crean /dev/sda, /dev/sdb, etc segÃºn haya otro dispositivo o no, pero en /dev/disk/by-id se crean enlaces que siempre se llaman igual:

usb-Hama_MS_Card_Reader_000000000003

usb-Hama_SD_Card_Reader_000000000003

uno para cada slot, y al insertar una tarjeta SD:

usb-Hama_MS_Card_Reader_000000000003

usb-Hama_SD_Card_Reader_000000000003

usb-Hama_SD_Card_Reader_000000000003-part1

Si os parecen demasiado largos, siempre podÃ©is aÃ±adir reglas a udev para que os cree otros a gusto.

Saludos

----------

## dmery

Hoy mismo vere el kernel y activare de ser necesario el "Lun multiple", despues te comentare como marcha la cuestion, por si me "como" algun paso. Es que a este asunto de "SD card reader" lo vengo siguiendo desde hace rato y no lo pude resolver con Gentoo. Gracias nuevamente pos tu soporte.

Salu2

Daniel Mery  :Very Happy: 

----------

## pcmaster

Pues yo lo tengo funcionando, por USB. AsÃ­ que Ã¡nimo.  :Smile: 

----------

## dmery

Finalmente compile el kernel con el "Lun multiple" y realizo todos los pasos del minihowto, pero nada... no puedo leer los "Memory Stick". Realmente no se mas por donde ir y ya llevo mucho "tiempo invertido" en este asuntillo....mucho me temo que quedara asi hasta que quiza mas adelante sea mas facil este "merequetenge". Com Guin2 y Ubuntu Edgy no tengo problemas, inserto el "Memory Stick" se enciende un "led" verde y me abre la ventana con los datos. Pero en Gentoo no he logrado leer ese bendito MS.   :Twisted Evil: 

Bueno de todos modos, muchas gracias por la colaboracion a todos los companieros del foro.

fraternos salu2

Daniel Mery  :Very Happy: 

----------

## pcmaster

1- AsegÃºrate de tener udev y hotplug actualizados a la Ãºltima versiÃ³n.

2- A ver si te sirve esto:

http://www.webcon.ca/~imorgan/tifm21/

----------

## dmery

 *pcmaster wrote:*   

> 1- AsegÃºrate de tener udev y hotplug actualizados a la Ãºltima versiÃ³n.
> 
> 2- A ver si te sirve esto:
> 
> http://www.webcon.ca/~imorgan/tifm21/

 

Efectivamente tengo actualizado el sistema, antes de compilar el kernel realice un "emerge --sync" y despues un "emerge -uDav world".

en cuanto al enlace que me envias (muchas gracias) en una parte plantea que no trabaja para las "memory stick"

It was merged in 2.6.17-rc1, and also worked for me when backported to 2.6.16. This will give you read/write access (albeit quite slow, < 500 kB/s) to SD cards (and maybe MMC?) only. This will not work for Memory Stick, XD, or SM.

Esa es precisamente el tipo de tarjeta que me interesa poder "leer" ya que las utilizan la camara de foto digital mia (CyberShot de Sony). De todas maneras maniana le "echare" otra "encarada" a ver que pasa...esperemos la victoria !!! Obviamente te comentare que tanto pude o no avanzar. Reitero -la gratitud nunca esta de mas- mi mas sincero agradecimiento por tu ayuda.

Salu2

Daniel Mery   :Very Happy: 

----------

## capira

dmery, haznos saber tus avances ... yo tambiÃ©n quiero leer las MS. He coseguido leer una SD, pero no escribir, a ver si luego le echo otro rato.

Saludos

----------

## artic

Actualizado a 9 /11/06 añadida una pequeña FAQ.

salu2

----------

## artic

Dmery respecto a los memorys stick no los he probado.

Yo solo he utilizado SD ,supongo que el resto de tarjetas tb funcionaran.

Cuando insertas la tarjeta enciende la luz durante 1 seg ,no como en windows q se queda encendida permanentemente.En cambio al realizar rw si que parpadea.

salu2

----------

## artic

Nuevas noticias :

Nuevo controlador para Texas Instruments TI incluido en las mm-sources rc5 pasteo la descripcion:

 *Quote:*   

> Say Y here if you want to be able to access MMC/SD cards with           │
> 
>   │ the Texas Instruments(R) Flash Media card reader, found in many         │  _
> 
>   │ laptops.                                                                │
> ...

 

salu2

----------

## joaquin

Hola artic

Quería saber cómo llegaste a la conclusión de que debías activar el bit 2 del offset 4C?   :Shocked: 

Dónde y cómo obtuviste esa información?  :Rolling Eyes: 

A lo mejor esa infomación me ayudaría a encontrar la forma de poner a funcionar mi controladora ENE que funciona con el driver sdhci pero no detecta la inserción de la tarjeta SD.

----------

## artic

Hola a todos ,

He actualizado el manual con referencia al último kernel .

Un saludo

----------

## Eleazar Anzola

Hola a to2,

Creo que este es el lugar donde debo hacer la consulta referente a 

```
Sony Corp. MRW62E Multi-Card Reader/Writer
```

La acabo de montar en mi AMD64 con 2.6.29-gentoo-r5, en el cual al hacer un lsusb obtengo

```
lsusb Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 001 Device 002: ID 054c:01bd Sony Corp. MRW62E Multi-Card Reader/Writer

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
```

Reconocida y vista en /dev/sdc, pero al montar un SD/GB Kingstone de una camara Canon, no logro ver el contenido de la misma, ni montarla de algun modo.

Lo curioso es que tengo una camara digital Genius y al conectarla por usb a la maquina si la reconoce como un storage usb sin problemas pudiendo leer, copiar y borrar información.

Que debo configurar en el Sony Corp. MRW62E Multi-Card Reader/Writer para poder montar los SD?.

Alguna idea?

----------

## artic

Yo revisaría el kernel para ver si en algún módulo aparece la controladora de tu tarjeta , de todas formas estás seguro de que has compilado el resto de módulos o que tienes soporte en el kernel para dispositivos mmc/sd ????? Porque por lo que muestras o bien tu controladora no está soportada o bien te falta algún módulo por cargar.

¿Que te dice el dmesg al insertar una tarjeta en la ranura ? 

¿Se llega a activar el led de la lectora?

¿Has probado a cargar los módulos en modo debug?

salu2

----------

## Eleazar Anzola

he activado todos los módulos y si se enciende el led al introducir una SD, lo que no logro es ver que coloque algo como /dev/sdc1 y solo aparece /dev/sdc . Tambien he tratado de hacer un cfdisk al SD para ver si se logra ver el formato ó ys existe alguna partición en la misma y nada que ver.

Extrañamente lo hago en la camara digital y si se ven las fotos e inclusive como dije puedo montar la misma como un USB Storage y todo se ve todo bien.

Seguire buscando a ver que sucede.

----------

## artic

/dev/sdc1 ???? es que  deberías buscar /dev/mmcblk0 /dev/mmcblk0p1 que es el /dev que es el que tiene que create udev al insertar la tarjeta, /dev/sdc1 te lo crea si conectas por medio de la cámara via usb , tambien te debes asegurar que todos los módulos (y me refiero a los comunes ) estén cargados o compilados directamente en el kernel , ya que si compilo todos como módulos siempre se olvida de cargarme alguno que me es indispensable y la cosa no acaba de funcionar.

salu2

----------

