Hi Gleb,

On Monday 18 June 2012 12:56:30 Gleb Smirnoff wrote:
> Author: glebius
> Date: Mon Jun 18 10:56:29 2012
> New Revision: 237224
> URL: http://svn.freebsd.org/changeset/base/237224
>
> Log:
>   Merge 231266 from head:
>     Add support for RICOH R5CE823 card reader, that can be found in
>     some Lenovo laptops.
>
>     The conroller needs a quirk to lower its frequency, and after
>     that it operates normally.
...
> Modified: stable/9/sys/dev/sdhci/sdhci.c
> ===========================================================================
>=== --- stable/9/sys/dev/sdhci/sdhci.c Mon Jun 18 07:54:10 2012        
>(r237223)
> +++ stable/9/sys/dev/sdhci/sdhci.c    Mon Jun 18 10:56:29 2012        
> (r237224) @@
> -74,6 +74,8 @@ __FBSDID("$FreeBSD$");
>  #define SDHCI_QUIRK_INCR_TIMEOUT_CONTROL             (1<<7)
>  /* Controller has broken read timings */
>  #define SDHCI_QUIRK_BROKEN_TIMINGS                   (1<<8)
> +/* Controller needs lowered frequency */
> +#define      SDHCI_QUIRK_LOWER_FREQUENCY                     (1<<9)
>
>  static const struct sdhci_device {
>       uint32_t        model;
> @@ -85,6 +87,8 @@ static const struct sdhci_device {
>           SDHCI_QUIRK_FORCE_DMA },
>       { 0xe8221180,   0xffff, "RICOH SD",
>           SDHCI_QUIRK_FORCE_DMA },
> +     { 0xe8231180,   0xffff, "RICOH R5CE823 SD",
> +         SDHCI_QUIRK_LOWER_FREQUENCY },
>       { 0x8034104c,   0xffff, "TI XX21/XX11 SD",
>           SDHCI_QUIRK_FORCE_DMA },
>       { 0x05501524,   0xffff, "ENE CB712 SD",
> @@ -350,6 +354,24 @@ sdhci_init(struct sdhci_slot *slot)
>  }
>
>  static void
> +sdhci_lower_frequency(device_t dev)
> +{
> +
> +     /* Enable SD2.0 mode. */
> +     pci_write_config(dev, SDHC_PCI_MODE_KEY, 0xfc, 1);
> +     pci_write_config(dev, SDHC_PCI_MODE, SDHC_PCI_MODE_SD20, 1);
> +     pci_write_config(dev, SDHC_PCI_MODE_KEY, 0x00, 1);
> +
> +     /*
> +      * Some SD/MMC cards don't work with the default base
> +      * clock frequency of 200MHz.  Lower it to 50Hz.

Are you sure the comment shouldn't have read '50MHz'?

> +      */
> +     pci_write_config(dev, SDHC_PCI_BASE_FREQ_KEY, 0x01, 1);
> +     pci_write_config(dev, SDHC_PCI_BASE_FREQ, 50, 1);
> +     pci_write_config(dev, SDHC_PCI_BASE_FREQ_KEY, 0x00, 1);
> +}
> +
> +static void
>  sdhci_set_clock(struct sdhci_slot *slot, uint32_t clock)
>  {
>       uint32_t res;


Regards,
-- 
Daan Vreeken
Vitsch Electronics
http://VitschVPN.nl/
http://Vitsch.nl/
tel: +31-(0)40-7113051
KvK nr: 17174380
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to