Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 21 Jul 2012 14:22:33 +0200
From:      Daan Vreeken <Daan@vitsch.nl>
To:        Gleb Smirnoff <glebius@freebsd.org>
Cc:        svn-src-all@freebsd.org
Subject:   Re: svn commit: r237224 - stable/9/sys/dev/sdhci
Message-ID:  <201207211422.33791.Daan@vitsch.nl>
In-Reply-To: <201206181056.q5IAuUwX075136@svn.freebsd.org>
References:  <201206181056.q5IAuUwX075136@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201207211422.33791.Daan>