aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi-imx.c
Commit message (Collapse)AuthorAgeFilesLines
...
* spi: imx: drop unnecessary read/modify/writeSascha Hauer2016-02-261-20/+9
| | | | | | | | | | | | | When the MX51_ECSPI_DMA is configured we control every single bit of the register, so there's no need to read/modify/write it. Instead just write the value we want to have in the register. Also, drop unnecessary check if we are actually doing DMA. The values written to the register have no effect in PIO mode and value written there during the last DMA transfer is still in the register, so we can equally well always write a value. Signed-off-by: Sascha Hauer <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: initialize usedma earlierSascha Hauer2016-02-261-7/+8
| | | | | | | | | | The SoC specific config function does not know if DMA will be used or not. This information will be useful to configure the SPI controller correctly for DMA in following patches, so initialize the usedma variable before calling into the SoC specific config function. Signed-off-by: Sascha Hauer <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: drop fallback to PIOSascha Hauer2016-02-241-13/+6
| | | | | | | | | | | | | At the moment the driver decides to fallback to PIO mode the buffers are already mapped for DMA. It's a bug to access them with the CPU afterwards, so we cannot just fallback to PIO mode. It should not be necessary anyway, since we only use DMA when we verified that it's possible in the fist place, so when prep_slave_sg fails it's a bug, either in the SDMA driver or in the can_dma implementation. Signed-off-by: Sascha Hauer <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: replace fixed timeout with calculatedAnton Bondarenko2016-02-191-3/+21
| | | | | | | | | | | | Fixed timeout value can fire while transaction is ongoing. This may happen because there are no strict requirements on SPI transaction duration. Dynamic timeout value is generated based on SCLK and transaction size. There is also 4 * SCLK delay between TX bursts related to HW internal CS change. Signed-off-by: Anton Bondarenko <[email protected]> Signed-off-by: Sascha Hauer <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* Merge remote-tracking branch 'spi/fix/imx' into spi-imxMark Brown2016-02-191-15/+2
|\
| * spi: imx: allow only WML aligned transfers to use DMAAnton Bondarenko2016-02-171-15/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | RX DMA tail data handling doesn't work correctly in many cases with current implementation. It happens because SPI core was setup to generates both RX and RX TAIL events. And RX TAIL event does not work correctly. This can be easily verified by sending SPI transaction with size modulus WML(32 in our case) not equal 0. Also removing change introduced in f6ee9b582d2db652497b73c1f117591dfb6d3a90 since this change only fix usecases with transfer size from 33 to 128 bytes and doesn't fix 129 bytes and bigger. This is output from transaction with len 138 bytes in loopback mode at 10Mhz: TX0000: a3 97 a2 55 53 be f1 fc f9 79 6b 52 14 13 e9 e2 TX0010: 2d 51 8e 1f 56 08 57 27 a7 05 d4 d0 52 82 77 75 TX0020: 1b 99 4a ed 58 3d 6a 52 36 d5 24 4a 68 8e ad 95 TX0030: 5f 3c 35 b5 c4 8c dd 6c 11 32 3d e2 b4 b4 59 cf TX0040: ce 23 3d 27 df a7 f9 96 fc 1e e0 66 2c 0e 7b 8c TX0050: ca 30 42 8f bc 9f 7b ce d1 b8 b1 87 ec 8a d6 bb TX0060: 2e 15 63 0e 3c dc a4 3a 7a 06 20 a7 93 1b 34 dd TX0070: 4c f5 ec 88 96 68 d6 68 a0 09 6f 8e 93 47 c9 41 TX0080: db ac cf 97 89 f3 51 05 79 71 RX0000: a3 97 a2 55 53 be f1 fc f9 79 6b 52 14 13 e9 e2 RX0010: 2d 51 8e 1f 56 08 57 27 a7 05 d4 d0 52 82 77 75 RX0020: 1b 99 4a ed 58 3d 6a 52 36 d5 24 4a 68 8e ad 95 RX0030: 5f 3c 35 00 00 b5 00 00 00 c4 00 00 8c 00 00 dd RX0040: 6c 11 32 3d e2 b4 b4 59 cf ce 23 3d 27 df a7 f9 RX0050: 96 fc 1e e0 66 2c 0e 7b 8c ca 30 42 8f 1f 1f bc RX0060: 9f 7b ce d1 b8 b1 87 ec 8a d6 bb 2e 15 63 0e ed RX0070: ed 3c 58 58 58 dc 3d 3d a4 6a 6a 3a 52 52 7a 36 RX0080: 06 20 a7 93 1b 34 dd 4c f5 ec Zeros at offset 33 and 34 caused by reading empty RX FIFO which not possible if DMA RX read was triggered by RX event. This mean DMA was triggered by RX TAIL event. Signed-off-by: Anton Bondarenko <[email protected]> Signed-off-by: Sascha Hauer <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* | Merge tag 'spi-fix-v4.5-rc4' into spi-imxMark Brown2016-02-181-3/+5
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | spi: Fixes for v4.5 A small clutch of driver specific fixes. The OMAP one is a bit worrying since it seems to be triggered by some changes in the runtime PM core code and I suspect there's other drivers across that are going to be using the same pattern outside of OMAP but nothing seems to be coming up in the testing people are doing.
| * | spi: imx: fix spi resource leak with dma transferGao Pan2016-01-221-3/+5
| |/ | | | | | | | | | | | | | | | | | | | | In spi_imx_dma_transfer(), when desc_rx = dmaengine_prep_slave_sg() fails, the context goes to label no_dma and then return. However, the memory allocated for desc_tx has not been freed yet, which leads to resource leak. Signed-off-by: Gao Pan <[email protected]> Reviewed-by: Fugang Duan <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* / spi: imx: use proper dev_* functions for driver messagesSascha Hauer2016-02-171-15/+12
|/ | | | | | | | Add a struct device * member to the private driver data and use it to print messages using dev_* functions rather than pr_*. Signed-off-by: Sascha Hauer <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: defer spi initialization, if DMA engine isAnton Bondarenko2015-12-151-0/+3
| | | | | | | | | | If SPI device supports DMA mode, but DMA controller is not yet available due to e.g. a delay in the corresponding kernel module initialization, retry to initialize SPI driver later on instead of falling back into PIO only mode. Signed-off-by: Anton Bondarenko <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: return error from dma channel requestAnton Bondarenko2015-12-151-11/+16
| | | | | | | | | | | On SDMA initialization return exactly the same error, which is reported by dma_request_slave_channel_reason(), it is a preceding change to defer SPI DMA initialization, if SDMA module is not yet available. Signed-off-by: Vladimir Zapolskiy <[email protected]> Signed-off-by: Anton Bondarenko <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: enable loopback only for ECSPI controller familyAnton Bondarenko2015-12-151-5/+6
| | | | | | | | Limit SPI_LOOP mode to ECSPI controller (iMX.51, iMX53 and i.MX6) only since there is no support in other families specific code for now. Signed-off-by: Anton Bondarenko <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: fix loopback mode setup after controller resetAnton Bondarenko2015-12-151-1/+3
| | | | | | | | | If controller hold in reset it's not possible to write any register except CTRL. So all other registers must be updated only after controller bring out from reset. Signed-off-by: Anton Bondarenko <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: add function to check for IMX51 family controllerAnton Bondarenko2015-12-071-3/+8
| | | | | | | | Similar to other controller type checks add check function for IMX51. It includes IMX53 and IMX6. Signed-off-by: Anton Bondarenko <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: replace multiple watermarks with single for RX, TX and RXTAnton Bondarenko2015-12-071-16/+13
| | | | | | | | There is no need to have different watermarks levels since they are the same. Merge them into one WML parameter. Signed-off-by: Anton Bondarenko <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: reorder HW operations enable order to avoid possible RX data lossAnton Bondarenko2015-12-071-2/+10
| | | | | | | | | | | | | The overflow may happen due to rescheduling for another task and/or interrupt if we enable SPI HW before starting RX DMA. So RX DMA enabled first to make sure data would be read out from FIFO ASAP. TX DMA enabled next to start filling TX FIFO with new data. And finaly SPI HW enabled to start actual data transfer. The risk rise in case of heavy system load and high SPI clock. Signed-off-by: Anton Bondarenko <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: terminate RX DMA transaction in case of TX DMA timeoutAnton Bondarenko2015-12-071-0/+1
| | | | | | | | | Not only TX DMA should be terminated, but RX DMA also. It's required to avoid accidential DMA memory writes from RX DMA channel and properly terminate transaction. Signed-off-by: Anton Bondarenko <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: Add loopback mode supportFabio Estevam2015-12-041-2/+13
| | | | | | | | | | Loopback mode can be activated by setting bit LBC (LoopBack Control) of register ECSPI_TESTREG. Add support for it. Signed-off-by: Fabio Estevam <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: fix ecspi mode setupAndrew Y. Kuksov2015-10-221-0/+7
| | | | | | | | | | | | | | | Fixed problem with setting spi mode 0 or 1 after setting mode 2 or 3 SPI_MODE_0 and SPI_MODE_1 requires clock low when inactive. SPI_MODE_2 and SPI_MODE_3 requires clk high when inactive. Currently driver can just set bits in fields SCLK_PHA (SPI Clock/Data Phase Control), SCLK_POL (SPI Clock Polarity Control), SCLK_CTL (controls the inactive state of SCLK) ans SS_POL (SPI SS Polarity Select) of ECSPIx_CONFIGREG register. This patch allows driver to clear corresponding bits in these fields. Signed-off-by: Andrew Y. Kuksov <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: imx: Fix small DMA transfersSascha Hauer2015-07-241-2/+3
| | | | | | | | | | | | | DMA transfers must be greater than the watermark level size. spi_imx->rx_wml and spi_imx->tx_wml contain the watermark level in 32bit words whereas struct spi_transfer contains the transfer len in bytes. Fix the check if DMA is possible for a transfer accordingly. This fixes transfers with sizes between 33 and 128 bytes for which previously was claimed that DMA is possible. Fixes: f62caccd12c17e4 (spi: spi-imx: add DMA support) Signed-off-by: Sascha Hauer <[email protected]> Cc: [email protected] Signed-off-by: Mark Brown <[email protected]>
* spi: imx: Constify platform_device_idKrzysztof Kozlowski2015-05-011-1/+1
| | | | | | | | The platform_device_id is not modified by the driver and core uses it as const. Signed-off-by: Krzysztof Kozlowski <[email protected]> Signed-off-by: Mark Brown <[email protected]>
*-. Merge remote-tracking branches 'spi/topic/fsl-cspi', 'spi/topic/fsl-dspi', ↵Mark Brown2015-04-111-2/+2
|\ \ | | | | | | | | | 'spi/topic/imx' and 'spi/topic/of-id' into spi-next
| | * spi: spi-imx: use correct enumeration typeStefan Agner2015-03-031-2/+2
| |/ | | | | | | | | | | | | | | | | | | The fourth argument of dmaengine_prep_slave_sg needs to be of the enumeration type dma_transfer_direction instead of dma_data_direction. Since the used enumeration values actually stay the same, this is not an actual issue at runtime. Signed-off-by: Stefan Agner <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* / spi: imx: read back the RX/TX watermark levels earlierLucas Stach2015-04-011-2/+2
|/ | | | | | | | | | | | | | | | | | | They are used to decide if the controller can do DMA on a buffer of a specific length and thus are needed before any transfer is attempted. This fixes a memory leak where the SPI core uses the drivers can_dma() callback to determine if a buffer needs to be mapped. As the watermark levels aren't correct at that point the driver falsely claims to be able to DMA the buffer when it fact it isn't. After the transfer has been done the core uses the same callback to determine if it needs to unmap the buffers. As the driver now correctly claims to not being able to DMA the buffer the core doesn't attempt to unmap the buffer which leaves the SGT leaking. Fixes: f62caccd12c17e4 (spi: spi-imx: add DMA support) Signed-off-by: Lucas Stach <[email protected]> Signed-off-by: Mark Brown <[email protected]> Cc: [email protected]
*---. Merge remote-tracking branches 'spi/topic/img-spfi', 'spi/topic/imx', ↵Mark Brown2015-02-081-14/+14
|\ \ \ | | | | | | | | | | | | 'spi/topic/inline', 'spi/topic/meson' and 'spi/topic/mxs' into spi-next
| | * | spi: spi-imx: cleanup wait_for_completion handlingNicholas Mc Guire2015-02-041-7/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | return type of wait_for_completion_timeout is unsigned long not int and always returns >=0 , this patch adds a suitable return variable and simplifies the return value checking as there is no < 0 case. Signed-off-by: Nicholas Mc Guire <[email protected]> Signed-off-by: Mark Brown <[email protected]>
| | * | spi: spi-imx: Do not store the irq number in the private structureFabio Estevam2014-12-301-7/+6
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | The irq number is only used inside the probe function, so there is really no need to store it in the private structure. Use a local 'irq' variable to hold the the irq number instead. Signed-off-by: Fabio Estevam <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* / / spi: imx: use pio mode for i.mx6dlRobin Gong2015-02-031-0/+4
|/ / | | | | | | | | | | | | | | | | | | For TKT238285 hardware issue which may cause txfifo store data twice can only be caught on i.mx6dl, we use pio mode instead of DMA mode on i.mx6dl. Fixes: f62caccd12c17e4 (spi: spi-imx: add DMA support) Signed-off-by: Robin Gong <[email protected]> Signed-off-by: Mark Brown <[email protected]> Cc: [email protected]
* / spi: drop owner assignment from platform_driversWolfram Sang2014-10-201-1/+0
|/ | | | | | | A platform_driver does not need to set an owner, it will be populated by the driver core. Signed-off-by: Wolfram Sang <[email protected]>
* spi: spi-imx: add DMA supportRobin Gong2014-09-171-5/+279
| | | | | | | | | | | | | | | | | | Enable DMA support on i.mx6. The read speed can increase from 600KB/s to 1.2MB/s on i.mx6q. You can disable or enable dma function in dts. If not set "dma-names" in dts, spi will use PIO mode. This patch only validate on i.mx6, not i.mx5, but encourage ones to apply this patch on i.mx5 since they share the same IP. Note: Sometime, there is a weid data in rxfifo after one full tx/rx transfer finish by DMA on i.mx6dl, so we disable dma functhion on i.mx6dl. Signed-off-by: Frank Li <[email protected]> Signed-off-by: Robin Gong <[email protected]> Acked-by: Marek Vasut <[email protected]> Signed-off-by: Mark Brown <[email protected]>
*---. Merge remote-tracking branches 'spi/topic/imx', 'spi/topic/init', ↵Mark Brown2014-03-301-3/+2
|\ \ \ | | | | | | | | | | | | 'spi/topic/mpc512x-psc', 'spi/topic/mpc52xx', 'spi/topic/mxs', 'spi/topic/nuc900', 'spi/topic/oc-tiny' and 'spi/topic/octeon' into spi-next
| | * | spi: delete non-required instances of include <linux/init.h>Paul Gortmaker2014-02-031-1/+0
| | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | None of these files are actually using any __init type directives and hence don't need to include <linux/init.h>. Most are just a left over from __devinit and __cpuinit removal, or simply due to code getting copied from one driver to the next. Signed-off-by: Paul Gortmaker <[email protected]> Signed-off-by: Mark Brown <[email protected]>
| * | spi/imx: Use dev_name() for request_irq() to distinguish SPIsAlexander Shiyan2014-02-231-1/+1
| | | | | | | | | | | | | | | Signed-off-by: Alexander Shiyan <[email protected]> Signed-off-by: Mark Brown <[email protected]>
| * | spi: spi-imx: Propagate the real error code on platform_get_irq() failureFabio Estevam2014-02-141-1/+1
| |/ | | | | | | | | | | | | | | | | No need to return a 'fake' return value on platform_get_irq() failure. Just return the error code itself instead. Signed-off-by: Fabio Estevam <[email protected]> Signed-off-by: Mark Brown <[email protected]>
| |
| \
*-. \ Merge remote-tracking branches 'spi/topic/bus-num', 'spi/topic/cleanup', ↵Mark Brown2014-03-301-1/+1
|\ \ \ | | |/ | |/| | | | 'spi/topic/clps711x', 'spi/topic/coldfire', 'spi/topic/completion' and 'spi/topic/davinci' into spi-next
| | * spi: Use reinit_completion at appropriate placesAxel Lin2014-02-101-1/+1
| |/ | | | | | | | | | | | | | | Calling init_completion() once is enough. For the rest of the iterations, call reinit_completion() instead. Signed-off-by: Axel Lin <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* / spi: spi-imx: spi_imx_remove: do not disable disabled clocksPhilippe De Muyter2014-02-281-2/+2
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, at module removal, one gets the following warnings: ------------[ cut here ]------------ WARNING: at drivers/clk/clk.c:780 clk_disable+0x18/0x24() Modules linked in: spi_imx(-) [last unloaded: ev76c560] CPU: 1 PID: 16337 Comm: rmmod Tainted: G W 3.10.17-80548-g90191eb-dirty #33 [<80013b4c>] (unwind_backtrace+0x0/0xf8) from [<800115dc>] (show_stack+0x10/0x14) [<800115dc>] (show_stack+0x10/0x14) from [<800257b8>] (warn_slowpath_common+0x4c/0x68) [<800257b8>] (warn_slowpath_common+0x4c/0x68) from [<800257f0>] (warn_slowpath_null+0x1c/0x24) [<800257f0>] (warn_slowpath_null+0x1c/0x24) from [<803f60ec>] (clk_disable+0x18/0x24) [<803f60ec>] (clk_disable+0x18/0x24) from [<7f02c9cc>] (spi_imx_remove+0x54/0x9c [spi_imx]) [<7f02c9cc>] (spi_imx_remove+0x54/0x9c [spi_imx]) from [<8025868c>] (platform_drv_remove+0x18/0x1c) [<8025868c>] (platform_drv_remove+0x18/0x1c) from [<80256f60>] (__device_release_driver+0x70/0xcc) [<80256f60>] (__device_release_driver+0x70/0xcc) from [<80257770>] (driver_detach+0xcc/0xd0) [<80257770>] (driver_detach+0xcc/0xd0) from [<80256d90>] (bus_remove_driver+0x7c/0xc0) [<80256d90>] (bus_remove_driver+0x7c/0xc0) from [<80068668>] (SyS_delete_module+0x144/0x1f8) [<80068668>] (SyS_delete_module+0x144/0x1f8) from [<8000e080>] (ret_fast_syscall+0x0/0x30) ---[ end trace 1f5df9ad54996300 ]--- ------------[ cut here ]------------ WARNING: at drivers/clk/clk.c:780 clk_disable+0x18/0x24() Modules linked in: spi_imx(-) [last unloaded: ev76c560] CPU: 1 PID: 16337 Comm: rmmod Tainted: G W 3.10.17-80548-g90191eb-dirty #33 [<80013b4c>] (unwind_backtrace+0x0/0xf8) from [<800115dc>] (show_stack+0x10/0x14) [<800115dc>] (show_stack+0x10/0x14) from [<800257b8>] (warn_slowpath_common+0x4c/0x68) [<800257b8>] (warn_slowpath_common+0x4c/0x68) from [<800257f0>] (warn_slowpath_null+0x1c/0x24) [<800257f0>] (warn_slowpath_null+0x1c/0x24) from [<803f60ec>] (clk_disable+0x18/0x24) [<803f60ec>] (clk_disable+0x18/0x24) from [<7f02c9e8>] (spi_imx_remove+0x70/0x9c [spi_imx]) [<7f02c9e8>] (spi_imx_remove+0x70/0x9c [spi_imx]) from [<8025868c>] (platform_drv_remove+0x18/0x1c) [<8025868c>] (platform_drv_remove+0x18/0x1c) from [<80256f60>] (__device_release_driver+0x70/0xcc) [<80256f60>] (__device_release_driver+0x70/0xcc) from [<80257770>] (driver_detach+0xcc/0xd0) [<80257770>] (driver_detach+0xcc/0xd0) from [<80256d90>] (bus_remove_driver+0x7c/0xc0) [<80256d90>] (bus_remove_driver+0x7c/0xc0) from [<80068668>] (SyS_delete_module+0x144/0x1f8) [<80068668>] (SyS_delete_module+0x144/0x1f8) from [<8000e080>] (ret_fast_syscall+0x0/0x30) ---[ end trace 1f5df9ad54996301 ]--- Since commit 9e556dcc55774c9a1032f32baa0e5cfafede8b70, "spi: spi-imx: only enable the clocks when we start to transfer a message", clocks are always disabled except when transmitting messages. There is thus no need to disable them at module removal. Fixes: 9e556dcc55774 (spi: spi-imx: only enable the clocks when we start to transfer a message) Signed-off-by: Philippe De Muyter <[email protected]> Acked-by: Huang Shijie <[email protected]> Signed-off-by: Mark Brown <[email protected]> Cc: [email protected]
* spi: spi-imx: Fix out-of-order CS/SCLK operation at low speedsMarek Vasut2013-12-201-2/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: -------- The problem this patch addresses has the following assumptions about the SPI bus setup: - The hardware used to find this is Freescale i.MX537 @ 1200MHz - The SPI SCLK operate at very low speed, less than 200 kHz - There are two SPI devices attached to the bus - Each device uses different GPIO for chipselect - Each device requires different SCLK signal polarity The observation of the SCLK and GPIO chipselect lines with a logic analyzer shows, that the SCLK polarity change does sometimes happen after the GPIO chipselect is asserted. The SPI slave device reacts on that by counting the SCLK polarity change as a clock pulse, which disrupts the communication with the SPI slave device. Explanation: ------------ We found an interesting correlation, that the maximum delay between the write into the ECSPIx_CONFIGREG register and the change of SCLK polarity at each SCLK frequency of 10 kHz, 20 kHz, 50 kHz and 100 kHz is 100 uS, 50 uS, 20 uS and 10 uS respectively. This lead us to a theory, that at SCLK frequency of 1 Hz, the delay would be 1 S. Therefore, the time it takes for the write to ECSPIx_CONFIGREG to take effect in the hardware is up to the duration of 1 tick of the SCLK clock. During this delay period, if the SCLK frequency is too low, the execution of the spi-imx.c driver can advance so much, that the GPIO chipselect will be asserted. The GPIO chipselect is asserted almost immediatelly. Solution: --------- The solution this patch presents is simple. We calculate the resulting SCLK clock first by dividing the ECSPI block clock by both dividers that are to be programmed into the configuration register. Based on the resulting SCLK clock, we derive the delay it will take for the changes to get really applied. We are extra careful here so we delay twice as long as we should. Note that the patch does not create additional overhead at high speeds as the delay will likely be close to zero there. Signed-off-by: Marek Vasut <[email protected]> To: [email protected] Cc: Fabio Estevam <[email protected]> Cc: Huang Shijie <[email protected]> Cc: Mark Brown <[email protected]> Cc: Sascha Hauer <[email protected]> Cc: Shawn Guo <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* Merge remote-tracking branch 'spi/topic/imx' into spi-nextMark Brown2013-10-251-0/+33
|\
| * spi: spi-imx: only enable the clocks when we start to transfer a messageHuang Shijie2013-10-231-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]>
* | spi: bitbang: Let spi_bitbang_start() take a reference to masterAxel Lin2013-09-171-1/+1
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | Many drivers that use bitbang library have a leak on probe error paths. This is because once a spi_master_get() call succeeds, we need an additional spi_master_put() call to free the memory. Fix this issue by moving the code taking a reference to master to spi_bitbang_start(), so spi_bitbang_start() will take a reference to master on success. With this change, the caller is responsible for calling spi_bitbang_stop() to decrement the reference and spi_master_put() as counterpart of spi_alloc_master() to prevent a memory leak. So now we have below patten for drivers using bitbang library: probe: spi_alloc_master -> Init reference count to 1 spi_bitbang_start -> Increment reference count remove: spi_bitbang_stop -> Decrement reference count spi_master_put -> Decrement reference count (reference count reaches 0) Fixup all users accordingly. Signed-off-by: Axel Lin <[email protected]> Suggested-by: Uwe Kleine-Koenig <[email protected]> Acked-by: Uwe Kleine-Koenig <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi/imx: expose module alias for loading from device-treeNiels de Vos2013-07-291-0/+1
| | | | | | | Enable auto loading by udev when spi-imx is compiled as a module. Signed-off-by: Niels de Vos <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: spi-imx: Check the return value from clk_prepare_enable()Fabio Estevam2013-07-151-4/+10
| | | | | | | | | | | clk_prepare_enable() may fail, so let's check its return value and propagate it in the case of error. While at it, fix the order of clk_disable_unprepare calls: clk_ipg should be disabled first, followed by clk_per. Signed-off-by: Fabio Estevam <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* spi: spi-imx: Use devm functionsFabio Estevam2013-07-151-46/+15
| | | | | | | Using devm functions can make the code smaller and cleaner. Signed-off-by: Fabio Estevam <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* Merge remote-tracking branch 'spi/topic/imx' into spi-nextMark Brown2013-06-261-8/+0
|\
| * spi: spi-imx: Let device core handle pinctrlFabio Estevam2013-05-131-8/+0
| | | | | | | | | | | | | | | | | | | | Since commit ab78029 (drivers/pinctrl: grab default handles from device core), we can rely on device core for handling pinctrl. So remove devm_pinctrl_get_select_default() from the driver. Signed-off-by: Fabio Estevam <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* | Merge remote-tracking branch 'spi/topic/core' into spi-nextMark Brown2013-06-261-3/+0
|\ \
| * | spi: remove unnecessary platform_set_drvdata()Jingoo Han2013-05-131-3/+0
| |/ | | | | | | | | | | | | | | | | | | | | The driver core clears the driver data to NULL after device_release or on probe failure, since commit 0998d0631001288a5974afc0b2a5f568bcdecb4d (device-core: Ensure drvdata = NULL when no driver is bound). Thus, it is not needed to manually clear the device driver data to NULL. Signed-off-by: Jingoo Han <[email protected]> Acked-by: Grant Likely <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* | spi: spi-imx: Fix compilation errorSachin Kamat2013-05-301-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix compilation error due to a typo introduced by commit 24778be20f ("spi: convert drivers to use bits_per_word_mask"). Without this patch we get the following build errors: drivers/spi/spi-imx.c: In function ‘spi_imx_setupxfer’: drivers/spi/spi-imx.c:703:2: warning: no return statement in function returning non-void [-Wreturn-type] drivers/spi/spi-imx.c: At top level: drivers/spi/spi-imx.c:705:9: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘->’ token drivers/spi/spi-imx.c:707:2: error: expected identifier or ‘(’ before ‘return’ drivers/spi/spi-imx.c:708:1: error: expected identifier or ‘(’ before ‘}’ token Signed-off-by: Sachin Kamat <[email protected]> Cc: Stephen Warren <[email protected]> Signed-off-by: Mark Brown <[email protected]>
* | spi: convert drivers to use bits_per_word_maskStephen Warren2013-05-291-3/+3
|/ | | | | | | | | | Fill in the recently added spi_master.bits_per_word_mask field in as many drivers as possible. Make related cleanups, such as removing any redundant error-checking, or empty setup callbacks. Signed-off-by: Stephen Warren <[email protected]> Acked-by: H Hartley Sweeten <[email protected]> Signed-off-by: Mark Brown <[email protected]>