aboutsummaryrefslogtreecommitdiff
path: root/drivers/mmc/sdhci.c
AgeCommit message (Collapse)Author
2006-09-24[MMC] MMC_CAP_BYTEBLOCK flag for non-log2 block sizes capable hostsRussell King
Some MMC hosts can only handle log2 block sizes. Unfortunately, the MMC password support needs to be able to send non-log2 block sizes. Provide a capability so that the MMC password support can decide whether it should use this support or not. The unfortunate side effect of this host limitation is that any MMC card protected by a password which is not a log2 block size can not be accessed on a host which only allows a log2 block size. This change just adds the flag. The MMC password support code needs updating to use it (if and when it is finally submitted.) Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-09-16[MMC] Add multi block-write capabilityRussell King
Add a capability flag for drivers to set when they can perform multi- block transfers to cards _and_ correctly report the number of bytes transferred should an error occur. The last point is very important - if a driver reports more bytes than were actually accepted by the card and an error occurs, there is the possibility for data loss. Pierre Ossman provided the patch for wbsd and sdhci. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-13[MMC] Change SDHCI version error to a warningPierre Ossman
O2 Micro's controllers have a larger specification version value and are therefore denied by the driver. When bypassing this check they seem to work fine. This patch makes the code a bit more forgiving by changing the error to a warning. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-13[MMC] Fix incorrect register accessPierre Ossman
There was a writel() being used on a 16-bit register. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-mmcLinus Torvalds
* 'devel' of master.kernel.org:/home/rmk/linux-2.6-mmc: [MMC] sdhci: remove duplicate error message [MMC] sdhci: force DMA on some controllers [MMC] sdhci: quirk for broken reset [MMC] sdhci: Add SDHCI controller ids
2006-07-02Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-mmcLinus Torvalds
* 'devel' of master.kernel.org:/home/rmk/linux-2.6-mmc: [MMC] sdhci: version bump sdhci [MMC] sdhci: support controller specific quirks [MMC] sdhci: more DMA capabilities tests [MMC] sdhci: reset sdhci controller early [MMC] sdhci: check controller version [MMC] sdhci: check only relevant inhibit bits [MMC] sdhci: Test for invalid block size [MMC] sdhci: Avoid sdhci DMA boundaries [MMC] Fix sdhci PIO routines [MMC] sdhci: fix interrupt handling [MMC] sdhci: correct register order [MMC] sdhci: proper timeout handling [MMC] sdhci: fix sdhci reset timeout [MMC] sdhci: fix timeout loops in sdhci [MMC] sdhci: support for multiple voltages [MMC] sdhci: print device id [MMC] sdhci: check SDHCI base clock
2006-07-02[PATCH] irq-flags: misc drivers: Use the new IRQF_ constantsThomas Gleixner
Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@elte.hu> Cc: "David S. Miller" <davem@davemloft.net> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-07-02[MMC] sdhci: remove duplicate error messagePierre Ossman
When there is remaining blocks untransferred, we get two error messages saying almost the same thing. Make sure at most one is shown. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: force DMA on some controllersPierre Ossman
Some controllers incorrectly report that the cannot do DMA. Forcefully enable it for those that we know it works fine on. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: quirk for broken resetPierre Ossman
Some controllers fail to complete a reset unless you touch the clock register first. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: version bump sdhciPierre Ossman
New version number for sdhci driver. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: support controller specific quirksPierre Ossman
As some specific controllers will have bugs, we need a way to map special behaviour to certain hardware. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: more DMA capabilities testsPierre Ossman
Properly test for controller interface to see if it's DMA capable. As many controllers are misconfigured in this regard, also add debug parameters to force DMA support either way. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: reset sdhci controller earlyPierre Ossman
The specification states that the capabilities register might need a reset to get correct values after boot up. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: check controller versionPierre Ossman
Check the interface version of the controller and bail out if it's an unknown version. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: check only relevant inhibit bitsPierre Ossman
Conform to the sdhci specification as to which inhibit bits should be checked at different times. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: Test for invalid block sizePierre Ossman
The controller has an upper limit on the block size. Make sure we do not cross it. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: Avoid sdhci DMA boundariesPierre Ossman
The sdhci controllers will issue an interrupt when a configurable number of bytes have been transfered using DMA. The purpose is to handle multiple, scattered memory pages. Unfortunately, it requires that all transfers are completely aligned to memory pages, which we cannot guarantee. So we just disable the function. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] Fix sdhci PIO routinesPierre Ossman
The sdhci controllers operate with blocks, not bytes. The PIO routines must therefore make sure that the minimum unit transfered is a complete block. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: fix interrupt handlingPierre Ossman
The specification says that interrupts should be cleared before the source is removed. We should also not set unknown bits. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: correct register orderPierre Ossman
The sdhci specification states that some registers must be written to in a specific order. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: proper timeout handlingPierre Ossman
Use the give timeout clock and calculate a proper timeout instead of using the maximum at all times. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: fix sdhci reset timeoutPierre Ossman
The reset register is automatically cleared when the reset has completed. Hence, we should busy wait and not have a fixed delay. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: fix timeout loops in sdhciPierre Ossman
The current timeout loop assume that jiffies are updated. This might not be the case depending on locks and if the kernel is compiled without preemption. Change the system to use a counter and fixed delays. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: support for multiple voltagesPierre Ossman
The sdhci controllers can support up to three voltage levels. Detect which and report back to the MMC layer. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: print device idPierre Ossman
As sdhci is a generic driver, it is helpful to see some more specific identification of the actual hardware in dmesg. PCI vendor, device and revision is sufficient in most cases. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-07-02[MMC] sdhci: check SDHCI base clockPierre Ossman
A base clock value of 0 means that the driver must get the base clock through some other means. As we have no other way of getting it, we must abort. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-06-19[MMC] Convert all hosts except mmci to use data->blkszRussell King
The MMC specification allows non-power of two block sizes. As such, we should not pass the log2 block size to host drivers, but instead pass the byte size. However, ARM MMCI can only work with log2 block size, so continue to pass both the log2 block size and byte block size. This means that for the moment, the byte block size must remain a power of two, but this is the first stage of removing this restriction for other hosts. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-06-12[MMC] sdhci truncated pointer fixAndrew Morton
On 64-bit machines, we just lost the uppermost 32 bits. Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-05-04[MMC] Move set_ios debugging into mmc.cRussell King
Rather than having every driver duplicate the set_ios debugging, provide a single version in mmc.c which can be expanded as we add additional functionality. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-03-29[MMC] Pass -DDEBUG on compiler command line if MMC_DEBUG selectedRussell King
Rather than each driver test MMC_DEBUG itself, and define DEBUG, pass it in via the makefile instead. Fix drivers to use pr_debug() where appropriate, and avoid defining a DEBUG() macro. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2006-03-24[PATCH] mmc: Secure Digital Host Controller Interface driverPierre Ossman
Driver for the Secure Digital Host Controller Interface specification. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Cc: Russell King <rmk@arm.linux.org.uk> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>