30 #include <linux/kernel.h>
31 #include <linux/module.h>
33 #include <linux/slab.h>
36 #include <linux/types.h>
44 #define DRIVER_NAME "spi_imx"
46 #define MXC_CSPIRXDATA 0x00
47 #define MXC_CSPITXDATA 0x04
48 #define MXC_CSPICTRL 0x08
49 #define MXC_CSPIINT 0x0c
50 #define MXC_RESET 0x1c
53 #define MXC_INT_RR (1 << 0)
54 #define MXC_INT_TE (1 << 1)
114 static inline unsigned spi_imx_get_fifosize(
struct spi_imx_data *
d)
119 #define MXC_SPI_BUF_RX(type) \
120 static void spi_imx_buf_rx_##type(struct spi_imx_data *spi_imx) \
122 unsigned int val = readl(spi_imx->base + MXC_CSPIRXDATA); \
124 if (spi_imx->rx_buf) { \
125 *(type *)spi_imx->rx_buf = val; \
126 spi_imx->rx_buf += sizeof(type); \
130 #define MXC_SPI_BUF_TX(type) \
131 static void spi_imx_buf_tx_##type(struct spi_imx_data *spi_imx) \
135 if (spi_imx->tx_buf) { \
136 val = *(type *)spi_imx->tx_buf; \
137 spi_imx->tx_buf += sizeof(type); \
140 spi_imx->count -= sizeof(type); \
142 writel(val, spi_imx->base + MXC_CSPITXDATA); \
155 static
int mxc_clkdivs[] = {0, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192,
156 256, 384, 512, 768, 1024};
159 static unsigned int spi_imx_clkdiv_1(
unsigned int fin,
160 unsigned int fspi,
unsigned int max)
164 for (i = 2; i <
max; i++)
165 if (fspi * mxc_clkdivs[i] >= fin)
172 static unsigned int spi_imx_clkdiv_2(
unsigned int fin,
177 for (i = 0; i < 7; i++) {
178 if (fspi * div >= fin)
186 #define MX51_ECSPI_CTRL 0x08
187 #define MX51_ECSPI_CTRL_ENABLE (1 << 0)
188 #define MX51_ECSPI_CTRL_XCH (1 << 2)
189 #define MX51_ECSPI_CTRL_MODE_MASK (0xf << 4)
190 #define MX51_ECSPI_CTRL_POSTDIV_OFFSET 8
191 #define MX51_ECSPI_CTRL_PREDIV_OFFSET 12
192 #define MX51_ECSPI_CTRL_CS(cs) ((cs) << 18)
193 #define MX51_ECSPI_CTRL_BL_OFFSET 20
195 #define MX51_ECSPI_CONFIG 0x0c
196 #define MX51_ECSPI_CONFIG_SCLKPHA(cs) (1 << ((cs) + 0))
197 #define MX51_ECSPI_CONFIG_SCLKPOL(cs) (1 << ((cs) + 4))
198 #define MX51_ECSPI_CONFIG_SBBCTRL(cs) (1 << ((cs) + 8))
199 #define MX51_ECSPI_CONFIG_SSBPOL(cs) (1 << ((cs) + 12))
200 #define MX51_ECSPI_CONFIG_SCLKCTL(cs) (1 << ((cs) + 20))
202 #define MX51_ECSPI_INT 0x10
203 #define MX51_ECSPI_INT_TEEN (1 << 0)
204 #define MX51_ECSPI_INT_RREN (1 << 3)
206 #define MX51_ECSPI_STAT 0x18
207 #define MX51_ECSPI_STAT_RR (1 << 3)
210 static unsigned int mx51_ecspi_clkdiv(
unsigned int fin,
unsigned int fspi)
216 unsigned int pre,
post;
221 post = fls(fin) - fls(fspi);
222 if (fin > fspi << post)
227 post =
max(4
U, post) - 4;
229 pr_err(
"%s: cannot set clock freq: %u (base freq: %u)\n",
230 __func__, fspi, fin);
236 pr_debug(
"%s: fin: %u, fspi: %u, post: %u, pre: %u\n",
237 __func__, fin, fspi, post, pre);
312 while (mx51_ecspi_rx_available(spi_imx))
316 #define MX31_INTREG_TEEN (1 << 0)
317 #define MX31_INTREG_RREN (1 << 3)
319 #define MX31_CSPICTRL_ENABLE (1 << 0)
320 #define MX31_CSPICTRL_MASTER (1 << 1)
321 #define MX31_CSPICTRL_XCH (1 << 2)
322 #define MX31_CSPICTRL_POL (1 << 4)
323 #define MX31_CSPICTRL_PHA (1 << 5)
324 #define MX31_CSPICTRL_SSCTL (1 << 6)
325 #define MX31_CSPICTRL_SSPOL (1 << 7)
326 #define MX31_CSPICTRL_BC_SHIFT 8
327 #define MX35_CSPICTRL_BL_SHIFT 20
328 #define MX31_CSPICTRL_CS_SHIFT 24
329 #define MX35_CSPICTRL_CS_SHIFT 12
330 #define MX31_CSPICTRL_DR_SHIFT 16
332 #define MX31_CSPISTATUS 0x14
333 #define MX31_STATUS_RR (1 << 3)
341 unsigned int val = 0;
343 if (enable & MXC_INT_TE)
369 if (is_imx35_cspi(spi_imx)) {
404 #define MX21_INTREG_RR (1 << 4)
405 #define MX21_INTREG_TEEN (1 << 9)
406 #define MX21_INTREG_RREN (1 << 13)
408 #define MX21_CSPICTRL_POL (1 << 5)
409 #define MX21_CSPICTRL_PHA (1 << 6)
410 #define MX21_CSPICTRL_SSPOL (1 << 8)
411 #define MX21_CSPICTRL_XCH (1 << 9)
412 #define MX21_CSPICTRL_ENABLE (1 << 10)
413 #define MX21_CSPICTRL_MASTER (1 << 11)
414 #define MX21_CSPICTRL_DR_SHIFT 14
415 #define MX21_CSPICTRL_CS_SHIFT 19
419 unsigned int val = 0;
421 if (enable & MXC_INT_TE)
443 unsigned int max = is_imx27_cspi(spi_imx) ? 16 : 18;
447 reg |= config->
bpw - 1;
473 #define MX1_INTREG_RR (1 << 3)
474 #define MX1_INTREG_TEEN (1 << 8)
475 #define MX1_INTREG_RREN (1 << 11)
477 #define MX1_CSPICTRL_POL (1 << 4)
478 #define MX1_CSPICTRL_PHA (1 << 5)
479 #define MX1_CSPICTRL_XCH (1 << 8)
480 #define MX1_CSPICTRL_ENABLE (1 << 9)
481 #define MX1_CSPICTRL_MASTER (1 << 10)
482 #define MX1_CSPICTRL_DR_SHIFT 13
486 unsigned int val = 0;
488 if (enable & MXC_INT_TE)
512 reg |= config->
bpw - 1;
535 .intctrl = mx1_intctrl,
536 .config = mx1_config,
537 .trigger = mx1_trigger,
538 .rx_available = mx1_rx_available,
544 .intctrl = mx21_intctrl,
545 .config = mx21_config,
546 .trigger = mx21_trigger,
547 .rx_available = mx21_rx_available,
554 .intctrl = mx21_intctrl,
555 .config = mx21_config,
556 .trigger = mx21_trigger,
557 .rx_available = mx21_rx_available,
563 .intctrl = mx31_intctrl,
564 .config = mx31_config,
565 .trigger = mx31_trigger,
566 .rx_available = mx31_rx_available,
573 .intctrl = mx31_intctrl,
574 .config = mx31_config,
575 .trigger = mx31_trigger,
576 .rx_available = mx31_rx_available,
582 .intctrl = mx51_ecspi_intctrl,
583 .config = mx51_ecspi_config,
584 .trigger = mx51_ecspi_trigger,
585 .rx_available = mx51_ecspi_rx_available,
586 .reset = mx51_ecspi_reset,
595 .name =
"imx21-cspi",
598 .name =
"imx27-cspi",
601 .name =
"imx31-cspi",
604 .name =
"imx35-cspi",
607 .name =
"imx51-ecspi",
615 { .compatible =
"fsl,imx1-cspi", .data = &imx1_cspi_devtype_data, },
616 { .compatible =
"fsl,imx21-cspi", .data = &imx21_cspi_devtype_data, },
617 { .compatible =
"fsl,imx27-cspi", .data = &imx27_cspi_devtype_data, },
618 { .compatible =
"fsl,imx31-cspi", .data = &imx31_cspi_devtype_data, },
619 { .compatible =
"fsl,imx35-cspi", .data = &imx35_cspi_devtype_data, },
620 { .compatible =
"fsl,imx51-ecspi", .data = &imx51_ecspi_devtype_data, },
631 if (!gpio_is_valid(gpio))
639 while (spi_imx->
txfifo < spi_imx_get_fifosize(spi_imx)) {
642 spi_imx->
tx(spi_imx);
654 spi_imx->
rx(spi_imx);
658 if (spi_imx->
count) {
659 spi_imx_push(spi_imx);
678 static int spi_imx_setupxfer(
struct spi_device *spi,
695 if (config.
bpw <= 8) {
696 spi_imx->
rx = spi_imx_buf_rx_u8;
697 spi_imx->
tx = spi_imx_buf_tx_u8;
698 }
else if (config.
bpw <= 16) {
699 spi_imx->
rx = spi_imx_buf_rx_u16;
700 spi_imx->
tx = spi_imx_buf_tx_u16;
701 }
else if (config.
bpw <= 32) {
702 spi_imx->
rx = spi_imx_buf_rx_u32;
703 spi_imx->
tx = spi_imx_buf_tx_u32;
712 static int spi_imx_transfer(
struct spi_device *spi,
724 spi_imx_push(spi_imx);
730 return transfer->
len;
733 static int spi_imx_setup(
struct spi_device *spi)
738 dev_dbg(&spi->
dev,
"%s: mode %d, %u bpw, %d hz\n", __func__,
741 if (gpio_is_valid(gpio))
749 static void spi_imx_cleanup(
struct spi_device *spi)
759 dev_get_platdata(&pdev->
dev);
766 if (!np && !mxc_platform_info) {
767 dev_err(&pdev->
dev,
"can't get the platform data\n");
771 ret = of_property_read_u32(np,
"fsl,spi-num-chipselects", &num_cs);
773 if (mxc_platform_info)
784 platform_set_drvdata(pdev, master);
789 spi_imx = spi_master_get_devdata(master);
790 spi_imx->
bitbang.master = spi_master_get(master);
793 int cs_gpio = of_get_named_gpio(np,
"cs-gpios", i);
794 if (!gpio_is_valid(cs_gpio) && mxc_platform_info)
798 if (!gpio_is_valid(cs_gpio))
808 spi_imx->
bitbang.chipselect = spi_imx_chipselect;
809 spi_imx->
bitbang.setup_transfer = spi_imx_setupxfer;
810 spi_imx->
bitbang.txrx_bufs = spi_imx_transfer;
811 spi_imx->
bitbang.master->setup = spi_imx_setup;
812 spi_imx->
bitbang.master->cleanup = spi_imx_cleanup;
822 dev_err(&pdev->
dev,
"can't get platform resource\n");
828 dev_err(&pdev->
dev,
"request_mem_region failed\n");
834 if (!spi_imx->
base) {
836 goto out_release_mem;
840 if (spi_imx->
irq < 0) {
847 dev_err(&pdev->
dev,
"can't get irq%d: %d\n", spi_imx->
irq, ret);
851 pinctrl = devm_pinctrl_get_select_default(&pdev->
dev);
852 if (IS_ERR(pinctrl)) {
853 ret = PTR_ERR(pinctrl);
858 if (IS_ERR(spi_imx->
clk_ipg)) {
859 ret = PTR_ERR(spi_imx->
clk_ipg);
864 if (IS_ERR(spi_imx->
clk_per)) {
865 ret = PTR_ERR(spi_imx->
clk_per);
869 clk_prepare_enable(spi_imx->
clk_per);
870 clk_prepare_enable(spi_imx->
clk_ipg);
878 master->
dev.of_node = pdev->
dev.of_node;
881 dev_err(&pdev->
dev,
"bitbang start failed with %d\n", ret);
890 clk_disable_unprepare(spi_imx->
clk_per);
891 clk_disable_unprepare(spi_imx->
clk_ipg);
903 spi_master_put(master);
905 platform_set_drvdata(pdev,
NULL);
911 struct spi_master *master = platform_get_drvdata(pdev);
913 struct spi_imx_data *spi_imx = spi_master_get_devdata(master);
919 clk_disable_unprepare(spi_imx->
clk_per);
920 clk_disable_unprepare(spi_imx->
clk_ipg);
928 spi_master_put(master);
932 platform_set_drvdata(pdev,
NULL);
941 .of_match_table = spi_imx_dt_ids,
944 .probe = spi_imx_probe,