diff options
author | Mark Brown <broonie@linaro.org> | 2013-10-25 04:51:29 -0400 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2013-10-25 04:51:29 -0400 |
commit | c25b2c9eb36502f81c59df764074a475249a4550 (patch) | |
tree | 9022af69f814d891419604978ff65330871236b6 /drivers/spi/spi-imx.c | |
parent | ffd6dd3eaa1e6a0d454c08efcc996ea7014aa1d2 (diff) | |
parent | 9e556dcc55774c9a1032f32baa0e5cfafede8b70 (diff) |
Merge remote-tracking branch 'spi/topic/imx' into spi-next
Diffstat (limited to 'drivers/spi/spi-imx.c')
-rw-r--r-- | drivers/spi/spi-imx.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index 02d9f468b2b6..b80f2f70fef7 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c | |||
@@ -749,6 +749,35 @@ static void spi_imx_cleanup(struct spi_device *spi) | |||
749 | { | 749 | { |
750 | } | 750 | } |
751 | 751 | ||
752 | static int | ||
753 | spi_imx_prepare_message(struct spi_master *master, struct spi_message *msg) | ||
754 | { | ||
755 | struct spi_imx_data *spi_imx = spi_master_get_devdata(master); | ||
756 | int ret; | ||
757 | |||
758 | ret = clk_enable(spi_imx->clk_per); | ||
759 | if (ret) | ||
760 | return ret; | ||
761 | |||
762 | ret = clk_enable(spi_imx->clk_ipg); | ||
763 | if (ret) { | ||
764 | clk_disable(spi_imx->clk_per); | ||
765 | return ret; | ||
766 | } | ||
767 | |||
768 | return 0; | ||
769 | } | ||
770 | |||
771 | static int | ||
772 | spi_imx_unprepare_message(struct spi_master *master, struct spi_message *msg) | ||
773 | { | ||
774 | struct spi_imx_data *spi_imx = spi_master_get_devdata(master); | ||
775 | |||
776 | clk_disable(spi_imx->clk_ipg); | ||
777 | clk_disable(spi_imx->clk_per); | ||
778 | return 0; | ||
779 | } | ||
780 | |||
752 | static int spi_imx_probe(struct platform_device *pdev) | 781 | static int spi_imx_probe(struct platform_device *pdev) |
753 | { | 782 | { |
754 | struct device_node *np = pdev->dev.of_node; | 783 | struct device_node *np = pdev->dev.of_node; |
@@ -810,6 +839,8 @@ static int spi_imx_probe(struct platform_device *pdev) | |||
810 | spi_imx->bitbang.txrx_bufs = spi_imx_transfer; | 839 | spi_imx->bitbang.txrx_bufs = spi_imx_transfer; |
811 | spi_imx->bitbang.master->setup = spi_imx_setup; | 840 | spi_imx->bitbang.master->setup = spi_imx_setup; |
812 | spi_imx->bitbang.master->cleanup = spi_imx_cleanup; | 841 | spi_imx->bitbang.master->cleanup = spi_imx_cleanup; |
842 | spi_imx->bitbang.master->prepare_message = spi_imx_prepare_message; | ||
843 | spi_imx->bitbang.master->unprepare_message = spi_imx_unprepare_message; | ||
813 | spi_imx->bitbang.master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; | 844 | spi_imx->bitbang.master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; |
814 | 845 | ||
815 | init_completion(&spi_imx->xfer_done); | 846 | init_completion(&spi_imx->xfer_done); |
@@ -872,6 +903,8 @@ static int spi_imx_probe(struct platform_device *pdev) | |||
872 | 903 | ||
873 | dev_info(&pdev->dev, "probed\n"); | 904 | dev_info(&pdev->dev, "probed\n"); |
874 | 905 | ||
906 | clk_disable(spi_imx->clk_ipg); | ||
907 | clk_disable(spi_imx->clk_per); | ||
875 | return ret; | 908 | return ret; |
876 | 909 | ||
877 | out_clk_put: | 910 | out_clk_put: |