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>