aboutsummaryrefslogtreecommitdiff
path: root/drivers/spi
AgeCommit message (Collapse)AuthorFilesLines
2013-10-25Merge remote-tracking branch 'spi/topic/bitbang' into spi-nextMark Brown1-6/+7
2013-10-25Merge remote-tracking branch 'spi/topic/bfin' into spi-nextMark Brown22-88/+83
2013-10-25Merge remote-tracking branch 'spi/topic/atmel' into spi-nextMark Brown11-73/+71
2013-10-25Merge remote-tracking branch 'spi/fix/s3c64xx' into spi-linusMark Brown1-0/+2
2013-10-25Merge remote-tracking branch 'spi/fix/modalias' into spi-linusMark Brown1-1/+1
2013-10-25Merge remote-tracking branch 'spi/fix/mcspi' into spi-linusMark Brown1-3/+9
2013-10-25Merge remote-tracking branch 'spi/fix/efm' into spi-linusMark Brown18-26/+35
2013-10-25spi/hspi: add device tree supportKuninori Morimoto1-0/+8
Support for loading the Renesas HSPI driver via devicetree. Signed-off-by: Kuninori Morimoto <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-24of/irq: Use irq_of_parse_and_map()Thierry Reding1-3/+3
Replace some instances of of_irq_map_one()/irq_create_of_mapping() and of_irq_to_resource() by the simpler equivalent irq_of_parse_and_map(). Signed-off-by: Thierry Reding <[email protected]> Acked-by: Rob Herring <[email protected]> [grant.likely: resolved conflicts with core code renames] Signed-off-by: Grant Likely <[email protected]>
2013-10-23spi: atmel: fix return value check in atmel_spi_probe()Wei Yongjun1-1/+3
In case of error, the function devm_ioremap_resource() returns ERR_PTR() and never returns NULL. The NULL test in the return value check should be replaced with IS_ERR(). Signed-off-by: Wei Yongjun <[email protected]> Acked-by: Nicolas Ferre <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-23spi: spi-imx: only enable the clocks when we start to transfer a messageHuang Shijie1-0/+33
Current code keeps the clocks enabled all the time, it wastes the power when there is no operaiton on the spi controller. In order to save the power, this patch adds the two hooks: spi_imx_prepare_message: enable the clocks for this message spi_imx_unprepare_message: disable the clocks. This patch also disables the clocks in the end of the probe. Signed-off-by: Huang Shijie <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-22spi/s3c64xx: Fix doubled clock disable on suspendKrzysztof Kozlowski1-6/+8
Fix doubled clock disable and unprepare during PM suspend which triggered the warnings: WARNING: at drivers/clk/clk.c:800 clk_disable+0x18/0x24() Modules linked in: CPU: 0 PID: 1745 Comm: sh Not tainted 3.10.14-01211-ge2549bb-dirty #62 [<c0015980>] (unwind_backtrace+0x0/0x138) from [<c0012a44>] (show_stack+0x10/0x14) [<c0012a44>] (show_stack+0x10/0x14) from [<c0022818>] (warn_slowpath_common+0x4c/0x68) [<c0022818>] (warn_slowpath_common+0x4c/0x68) from [<c0022850>] (warn_slowpath_null+0x1c/0x24) [<c0022850>] (warn_slowpath_null+0x1c/0x24) from [<c036e274>] (clk_disable+0x18/0x24) [<c036e274>] (clk_disable+0x18/0x24) from [<c02d5f78>] (s3c64xx_spi_suspend+0x28/0x54) [<c02d5f78>] (s3c64xx_spi_suspend+0x28/0x54) from [<c02b3a54>] (platform_pm_suspend+0x2c/0x5c) [<c02b3a54>] (platform_pm_suspend+0x2c/0x5c) from [<c02b8a30>] (dpm_run_callback+0x44/0x7c) [<c02b8a30>] (dpm_run_callback+0x44/0x7c) from [<c02b8b70>] (__device_suspend+0x108/0x300) [<c02b8b70>] (__device_suspend+0x108/0x300) from [<c02ba4e0>] (dpm_suspend+0x54/0x208) [<c02ba4e0>] (dpm_suspend+0x54/0x208) from [<c0066bcc>] (suspend_devices_and_enter+0x98/0x458) [<c0066bcc>] (suspend_devices_and_enter+0x98/0x458) from [<c0067150>] (pm_suspend+0x1c4/0x25c) [<c0067150>] (pm_suspend+0x1c4/0x25c) from [<c0066044>] (state_store+0x6c/0xbc) [<c0066044>] (state_store+0x6c/0xbc) from [<c0203290>] (kobj_attr_store+0x14/0x20) [<c0203290>] (kobj_attr_store+0x14/0x20) from [<c0157530>] (sysfs_write_file+0xfc/0x164) [<c0157530>] (sysfs_write_file+0xfc/0x164) from [<c00fd6b0>] (vfs_write+0xbc/0x1bc) [<c00fd6b0>] (vfs_write+0xbc/0x1bc) from [<c00fdaf0>] (SyS_write+0x40/0x68) [<c00fdaf0>] (SyS_write+0x40/0x68) from [<c000ea80>] (ret_fast_syscall+0x0/0x3c) The clocks may be already disabled before suspending. Check PM runtime suspend status and disable clocks only if device is not suspended. During resume do not enable the clocks if device is runtime suspended. Signed-off-by: Krzysztof Kozlowski <[email protected]> Signed-off-by: Kyungmin Park <[email protected]> Reviewed-by: Sylwester Nawrocki <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-22spi/s3c64xx: Do not ignore return value of spi_master_resume/suspendKrzysztof Kozlowski1-4/+4
During PM resume and suspend do not ignore the return value of spi_master_suspend() or spi_master_resume(). Instead pass it further. Signed-off-by: Krzysztof Kozlowski <[email protected]> Signed-off-by: Kyungmin Park <[email protected]> Reviewed-by: Sylwester Nawrocki <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi: spi-mxs: Use u32 instead of uint32_tTrent Piepho1-5/+5
It's consistent with all the other spi drivers that way. Signed-off-by: Trent Piepho <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi: spi-mxs: Don't set clock for each xferTrent Piepho1-1/+14
mxs_spi_setup_transfer() would set the SSP SCK rate every time it was called, which is before every transfer. It is uncommon for the SCK rate to change between transfers (or at all of that matter) and this causes many unnecessary reprogrammings of the clock registers. Code changed to only set the rate when it changes. This significantly speeds up short SPI messages, especially messages made up of many transfers, as the calculation of the clock divisors is rather costly. On an iMX287, using spidev with messages that consist of 511 transfers of 4 bytes each at an SCK of 48 MHz, the effective transfer rate more than doubles from about 290 KB/sec to 600 KB/sec! Signed-off-by: Trent Piepho <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi: spi-mxs: Clean up setup_transfer functionTrent Piepho1-11/+8
It can't be called with a NULL transfer anymore so it can be simplified to not check for that. Fix indention of line-wrapped code to Linux standard. The transfer pointer can be const. It's not necessary to check if the spi_transfer's speed_hz is zero, as the spi core also fills it in from the spi_device. However, the spi core does not check if spi_device's speed is zero so we have to do that still. Signed-off-by: Trent Piepho <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi: spi-mxs: Remove check of spi mode bitsTrent Piepho1-3/+0
The spi core already checks for a slave setting mode bits that we didn't list as supported when the master was registered. There is no need to do it again in the master driver. Signed-off-by: Trent Piepho <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi: spi-mxs: Fix race in setup methodTrent Piepho1-9/+1
Despite many warnings in the SPI documentation and code, the spi-mxs driver sets shared chip registers in the ->setup method. This method can be called when transfers are in progress on other slaves controlled by the master. Setting registers or any other shared state will corrupt those transfers. So fix mxs_spi_setup() to not call mxs_spi_setup_transfer(). mxs_spi_setup_transfer() is already called for each transfer when they are actually performed in mxs_spi_transfer_one(), so the call in mxs_spi_setup() isn't necessary to setup anything. Signed-off-by: Trent Piepho <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi: spi-mxs: Remove bogus setting of ssp clk rate fieldTrent Piepho1-1/+0
The ssp struct has a clock rate field, to provide the actual value, in Hz, of the SSP output clock (the rate of SSP_SCK) after mxs_ssp_set_clk_rate() is called. It is set by mxs_ssp_set_clk_rate(), for SSP using drivers (like SPI and MMC) to *read* if they want to know the actual clock rate. The SPI driver isn't supposed to *write* to it. For some reason the spi-mxs driver decides to write to this field on init, and sets it to the value of the SSP input clock (clk_sspN, from the MXS clocking block) in kHz. It shouldn't be setting the value, and certainly shouldn't be setting it with the wrong clock in the wrong units. Signed-off-by: Trent Piepho <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi: spi-mxs: Remove full duplex check, spi core already does itTrent Piepho1-6/+0
Because the driver sets the SPI_MASTER_HALF_DUPLEX flag, the spi core will check transfers to insure they are not full duplex. It's not necessary to check that in the spi-mxs driver as well. Signed-off-by: Trent Piepho <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi: spi-mxs: Fix chip select control bits in DMA modeTrent Piepho1-23/+13
In DMA mode the chip select control bits would be ORed into the CTRL0 register without first clearing the bits. This means that after addressing slave 1, the CTRL0 bit to address slave 1 would be still be set when addressing slave 0, resulting in slave 1 continuing to be addressed. The message handling function would pass the CS value to the txrx function, which would re-program the bits on each transfer in the message. The selected CS does not change during a message so this is inefficient. It also means there are two different sets of code for selecting the CS, one for PIO that worked and one for DMA that didn't. Change the code to set the CS bits in the message handling function once. Now the DMA and PIO txrx functions don't need to care about CS at all. Signed-off-by: Trent Piepho <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi: spi-mxs: Fix extra CS pulses and read mode in multi-transfer messagesTrent Piepho1-1/+2
There are two bits which control the CS line in the CTRL0 register: LOCK_CS and IGNORE_CRC. The latter would be better named DEASSERT_CS in SPI mode. Setting DEASSERT_CS causes CS to be de-asserted at the end of the transfer. It should normally be set only for the final segment of the final transfer. The DMA code explicitly sets it in this case, but because it never clears the bit from the ctrl0 register, it will remain set for all transfers in subsequent messages. This results in a CS pulse between transfers. There is a similar problem with the read mode bit never being cleared in DMA mode. This patch fixes DEASSERT_CS and READ being left on in DMA mode. Signed-off-by: Trent Piepho <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi: spi-mxs: Change flag arguments in txrx functions to bit flagsTrent Piepho1-24/+31
There are three flag arguments to the PIO and DMA txrx functions. Two are passed as pointers to integers, even though they are input only and not modified, which makes no sense to do. The third is passed as an integer. The compiler must use an argument register or stack variable for each flag this way. Using bitflags in a single flag argument is more efficient and produces smaller code, since all the flags can fit in a single register. And all the flag arguments get cumbersome, especially when more are added for things like GPIO chipselects. The "first" flag is never used, so can just be deleted. The "last" flag is renamed to DEASSERT_CS, since that's really what it does. The spi_transfer cs_change flag means that CS might be de-asserted on a transfer which is not last and not de-assert on the last transfer, so it is not which transfer is the last we need to know but rather the transfers after which CS should be de-asserted. This also extends the driver to not ignore cs_change when setting the DEASSERT_CS nee "last" flag. Signed-off-by: Trent Piepho <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi: spi-mxs: Always clear INGORE_CRC, to keep CS assertedTrent Piepho1-3/+2
INGORE_CRC, better named DEASSERT_CS, should be cleared on all tranfers except the last. So instead of only clearing it on the first transfer, we can just always clear it. It will set on the last transfer. This removes the only use of the "first" flag in the transfer functions, so that flag can be then be removed. Signed-off-by: Trent Piepho <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi: spi-mxs: Remove mxs_spi_enable and mxs_spi_disableTrent Piepho1-18/+4
These functions consist of nothing but one single writel call and are only called once. And the names really aren't accurate or clear, since they don't enable or disble SPI. Rather they set the bit that controls the state of CS at the end of transfer. It easier to follow the code to just set this bit with a writel() along with all the other bits being set in the same function. Signed-off-by: Trent Piepho <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi: spi-mxs: Always set LOCK_CSTrent Piepho1-6/+2
There are two bits which control the CS line in the CTRL0 register: LOCK_CS and IGNORE_CRC. The latter would be better named DEASSERT_CS in SPI mode. LOCK_CS keeps CS asserted though the entire transfer. This should always be set. The DMA code will always set it, explicitly on the first segment of the first transfer, and then implicitly on all the rest by never clearing the bit from the value read from the ctrl0 register. The PIO code will explicitly set it for the first transfer, leave it set for intermediate transfers, and then clear it for the final transfer. It should not clear it. The only reason to not set LOCK_CS would be to attempt an altered protocol where CS pulses between each word. Though don't get your hopes up if you want to do this, as the hardware doesn't appear to do this in any sane manner. It appears to be related to the hardware FIFO fill level. The code can be simplified by just setting LOCK_CS once and then not needing to deal with it at all in the PIO and DMA transfer functions. Signed-off-by: Trent Piepho <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi/s3c64xx: Add missing pm_runtime_put on setup failKrzysztof Kozlowski1-0/+1
pm_runtime_put() wasn't called if clock rate could not be set up in s3c64xx_spi_setup() leading to invalid count of device pm_runtime usage. Signed-off-by: Krzysztof Kozlowski <[email protected]> Reviewed-by: Sylwester Nawrocki <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-18spi/s3c64xx: Add missing pm_runtime_set_active() call in probe()Krzysztof Kozlowski1-0/+1
Mark device as PM runtime active during initialization to reflect actual device power/clocks state. This reduces the enable count for SPI bus controller gate clock so it can be disabled when the bus controller is not used. Signed-off-by: Krzysztof Kozlowski <[email protected]> Signed-off-by: Kyungmin Park <[email protected]> Reviewed-by: Sylwester Nawrocki <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-17spi/tegra20-slink: Move first transfer preparation to prepare_messageMark Brown1-30/+25
This is more idiomatic for the factored out message processing and gives a small simplification of the code since we always set the per-transfer parameters in the same fashion. Signed-off-by: Mark Brown <[email protected]> Tested-by: Stephen Warren <[email protected]>
2013-10-17spi/tegra20-slink: Crude refactoring to use core message parsingMark Brown1-42/+46
This is a half done conversion with minimal code reorganisation provided for bisection purposes. A further patch will move the first transfer preparation into tegra_slink_prepare_message(). The cs_change and udelay handling is removed, these should be implemented by the framework and in any case are buggy - the two fields should not be related and the cs_change handling appears to at best only work the first time it's used in a message. Signed-off-by: Mark Brown <[email protected]> Tested-by: Stephen Warren <[email protected]>
2013-10-16spi/atmel: Convert to devm_ioremap_resource()Mark Brown1-3/+1
This simplifies error handling. Signed-off-by: Mark Brown <[email protected]>
2013-10-16Merge remote-tracking branch 'spi/topic/trivial' into spi-atmelMark Brown16-67/+69
Conflicts (trivial overlapping cleanups): drivers/spi/spi-atmel.c
2013-10-16spi: Don't break user-visible strings to multiple source lines in driversJarkko Nikula7-43/+41
User-visible strings are more difficult to grep from sources if they are separated to multiple source lines. This is worse than over 80 columns long line code style violation. Fix this by making those to single-line strings or by breaking them between variables. While at there, convert if (printk_ratelimit()) dev_warn() to use dev_warn_ratelimited in spi-pxa2xx.c. Signed-off-by: Jarkko Nikula <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-16spi: Add missing newline to dev_ prints in driversJarkko Nikula5-8/+8
Signed-off-by: Jarkko Nikula <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-16spi: gpio: Include linux/of.h headerSachin Kamat1-0/+1
'of_match_ptr' is defined in linux/of.h. Include it explicitly. Signed-off-by: Sachin Kamat <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-15spi: fsl-dspi: add missing clk_disable_unprepare() in dspi_remove()Wei Yongjun1-0/+1
clock source is prepared and enabled by clk_prepare_enable() in probe function, but no disable or unprepare in remove. Signed-off-by: Wei Yongjun <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-15spi: spidev: Fix checkpatch issueJingoo Han1-3/+3
Fix the following checkpatch warnings. WARNING: Use #include <linux/uaccess.h> instead of <asm/uaccess.h> WARNING: braces {} are not necessary for any arm of this statement Signed-off-by: Jingoo Han <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-15spi: txx9: Fix checkpatch issueJingoo Han1-2/+2
Fix the following checkpatch warnings. WARNING: space prohibited between function name and open parenthesis '(' Signed-off-by: Jingoo Han <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-15spi: tegra20-slink: Fix checkpatch issueJingoo Han1-1/+1
Fix the following checkpatch warning. WARNING: space prohibited before semicolon Signed-off-by: Jingoo Han <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-15spi: sh-hspi: Fix checkpatch issueJingoo Han1-1/+1
Fix the following checkpatch warning. WARNING: space prohibited before semicolon Signed-off-by: Jingoo Han <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-15spi: orion: Fix checkpatch issueJingoo Han1-3/+3
Fix the following checkpatch warnings. WARNING: quoted string split across lines WARNING: sizeof *spi should be sizeof(*spi) Signed-off-by: Jingoo Han <[email protected]> Acked-by: Jason Cooper <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-15spi: butterfly: Fix checkpatch issueJingoo Han1-7/+6
Fix the following checkpatch errors and warnings. ERROR: space required before the open brace '{' ERROR: space required after that close brace '}' ERROR: space required before the open parenthesis '(' ERROR: do not use C99 // comments WARNING: sizeof *pp should be sizeof(*pp) Signed-off-by: Jingoo Han <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-14spi: bitbang: Fix checkpatch issueJingoo Han1-6/+7
Fix the following checkpatch warnings WARNING: sizeof *cs should be sizeof(*cs) WARNING: please, no space before tabs WARNING: space prohibited between function name and open parenthesis '(' WARNING: line over 80 characters Signed-off-by: Jingoo Han <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-14spi: atmel: Fix checkpatch issueJingoo Han1-2/+1
Fix the following checkpatch warning. WARNING: quoted string split across lines Signed-off-by: Jingoo Han <[email protected]> Acked-by: Nicolas Ferre <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-14spi: Fix checkpatch issueJingoo Han1-7/+6
Fix the following checkpatch error and warnings. ERROR: space required after that ',' (ctx:VxV) WARNING: quoted string split across lines WARNING: max() should probably be max_t(int, nb, master->num_chipselect) WARNING: sizeof *spi should be sizeof(*spi) WARNING: sizeof *master should be sizeof(*master) WARNING: sizeof x should be sizeof(x) Signed-off-by: Jingoo Han <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-14spi: dw-pci: Use dev_info() instead of printk()Jingoo Han1-1/+1
Change raw printk() call to dev_info() to provide a better message to userspace so it can properly identify the device. Signed-off-by: Jingoo Han <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-14spi: pl022: Use dev_info() instead of printk()Jingoo Han1-2/+2
Change raw printk() call to dev_info() to provide a better message to userspace so it can properly identify the device. Signed-off-by: Jingoo Han <[email protected]> Acked-by: Linus Walleij <[email protected]> Signed-off-by: Mark Brown <[email protected]>
2013-10-11spi/s3c64xx: Use core message handlingMark Brown1-96/+56
Signed-off-by: Mark Brown <[email protected]>
2013-10-11Merge remote-tracking branch 'spi/topic/s3c64xx' into spi-loopMark Brown3-50/+93
2013-10-11spi: Provide common spi_message processing loopMark Brown1-0/+92
The loops which SPI controller drivers use to process the list of transfers in a spi_message are typically very similar and have some error prone areas such as the handling of /CS. Help simplify drivers by factoring this code out into the core - if drivers provide a transfer_one() function instead of a transfer_one_message() function the core will handle processing at the message level. /CS can be controlled by either setting cs_gpio or providing a set_cs function. If this is not possible for hardware reasons then both can be omitted and the driver should continue to implement manual /CS handling. This is a first step in refactoring and it is expected that there will be further enhancements, for example factoring out of the mapping of transfers for DMA and the initiation and completion of interrupt driven transfers. Signed-off-by: Mark Brown <[email protected]>