]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/spi/spi-imx.c
arm: dts: tx6: add some aliases and a label for backlight@0
[karo-tx-linux.git] / drivers / spi / spi-imx.c
index 15323d8bd9cfa4237c34069a76e3700dd6873c15..b80f2f70fef7c22174df30a97c311f2aa9693e5c 100644 (file)
@@ -749,6 +749,35 @@ static void spi_imx_cleanup(struct spi_device *spi)
 {
 }
 
+static int
+spi_imx_prepare_message(struct spi_master *master, struct spi_message *msg)
+{
+       struct spi_imx_data *spi_imx = spi_master_get_devdata(master);
+       int ret;
+
+       ret = clk_enable(spi_imx->clk_per);
+       if (ret)
+               return ret;
+
+       ret = clk_enable(spi_imx->clk_ipg);
+       if (ret) {
+               clk_disable(spi_imx->clk_per);
+               return ret;
+       }
+
+       return 0;
+}
+
+static int
+spi_imx_unprepare_message(struct spi_master *master, struct spi_message *msg)
+{
+       struct spi_imx_data *spi_imx = spi_master_get_devdata(master);
+
+       clk_disable(spi_imx->clk_ipg);
+       clk_disable(spi_imx->clk_per);
+       return 0;
+}
+
 static int spi_imx_probe(struct platform_device *pdev)
 {
        struct device_node *np = pdev->dev.of_node;
@@ -786,7 +815,7 @@ static int spi_imx_probe(struct platform_device *pdev)
        master->num_chipselect = num_cs;
 
        spi_imx = spi_master_get_devdata(master);
-       spi_imx->bitbang.master = spi_master_get(master);
+       spi_imx->bitbang.master = master;
 
        for (i = 0; i < master->num_chipselect; i++) {
                int cs_gpio = of_get_named_gpio(np, "cs-gpios", i);
@@ -810,6 +839,8 @@ static int spi_imx_probe(struct platform_device *pdev)
        spi_imx->bitbang.txrx_bufs = spi_imx_transfer;
        spi_imx->bitbang.master->setup = spi_imx_setup;
        spi_imx->bitbang.master->cleanup = spi_imx_cleanup;
+       spi_imx->bitbang.master->prepare_message = spi_imx_prepare_message;
+       spi_imx->bitbang.master->unprepare_message = spi_imx_unprepare_message;
        spi_imx->bitbang.master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
 
        init_completion(&spi_imx->xfer_done);
@@ -872,6 +903,8 @@ static int spi_imx_probe(struct platform_device *pdev)
 
        dev_info(&pdev->dev, "probed\n");
 
+       clk_disable(spi_imx->clk_ipg);
+       clk_disable(spi_imx->clk_per);
        return ret;
 
 out_clk_put: