aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/spi/spi-imx.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
index dd1ce12aa386..c7db42d6b3bc 100644
--- a/drivers/spi/spi-imx.c
+++ b/drivers/spi/spi-imx.c
@@ -59,6 +59,7 @@ struct spi_imx_data;
59 59
60struct spi_imx_devtype_data { 60struct spi_imx_devtype_data {
61 void (*intctrl)(struct spi_imx_data *, int); 61 void (*intctrl)(struct spi_imx_data *, int);
62 int (*prepare_message)(struct spi_imx_data *, struct spi_message *);
62 int (*config)(struct spi_device *); 63 int (*config)(struct spi_device *);
63 void (*trigger)(struct spi_imx_data *); 64 void (*trigger)(struct spi_imx_data *);
64 int (*rx_available)(struct spi_imx_data *); 65 int (*rx_available)(struct spi_imx_data *);
@@ -486,6 +487,12 @@ static void mx51_ecspi_disable(struct spi_imx_data *spi_imx)
486 writel(ctrl, spi_imx->base + MX51_ECSPI_CTRL); 487 writel(ctrl, spi_imx->base + MX51_ECSPI_CTRL);
487} 488}
488 489
490static int mx51_ecspi_prepare_message(struct spi_imx_data *spi_imx,
491 struct spi_message *msg)
492{
493 return 0;
494}
495
489static int mx51_ecspi_config(struct spi_device *spi) 496static int mx51_ecspi_config(struct spi_device *spi)
490{ 497{
491 struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master); 498 struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
@@ -659,6 +666,12 @@ static void mx31_trigger(struct spi_imx_data *spi_imx)
659 writel(reg, spi_imx->base + MXC_CSPICTRL); 666 writel(reg, spi_imx->base + MXC_CSPICTRL);
660} 667}
661 668
669static int mx31_prepare_message(struct spi_imx_data *spi_imx,
670 struct spi_message *msg)
671{
672 return 0;
673}
674
662static int mx31_config(struct spi_device *spi) 675static int mx31_config(struct spi_device *spi)
663{ 676{
664 struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master); 677 struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
@@ -755,6 +768,12 @@ static void mx21_trigger(struct spi_imx_data *spi_imx)
755 writel(reg, spi_imx->base + MXC_CSPICTRL); 768 writel(reg, spi_imx->base + MXC_CSPICTRL);
756} 769}
757 770
771static int mx21_prepare_message(struct spi_imx_data *spi_imx,
772 struct spi_message *msg)
773{
774 return 0;
775}
776
758static int mx21_config(struct spi_device *spi) 777static int mx21_config(struct spi_device *spi)
759{ 778{
760 struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master); 779 struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
@@ -824,6 +843,12 @@ static void mx1_trigger(struct spi_imx_data *spi_imx)
824 writel(reg, spi_imx->base + MXC_CSPICTRL); 843 writel(reg, spi_imx->base + MXC_CSPICTRL);
825} 844}
826 845
846static int mx1_prepare_message(struct spi_imx_data *spi_imx,
847 struct spi_message *msg)
848{
849 return 0;
850}
851
827static int mx1_config(struct spi_device *spi) 852static int mx1_config(struct spi_device *spi)
828{ 853{
829 struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master); 854 struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
@@ -858,6 +883,7 @@ static void mx1_reset(struct spi_imx_data *spi_imx)
858 883
859static struct spi_imx_devtype_data imx1_cspi_devtype_data = { 884static struct spi_imx_devtype_data imx1_cspi_devtype_data = {
860 .intctrl = mx1_intctrl, 885 .intctrl = mx1_intctrl,
886 .prepare_message = mx1_prepare_message,
861 .config = mx1_config, 887 .config = mx1_config,
862 .trigger = mx1_trigger, 888 .trigger = mx1_trigger,
863 .rx_available = mx1_rx_available, 889 .rx_available = mx1_rx_available,
@@ -871,6 +897,7 @@ static struct spi_imx_devtype_data imx1_cspi_devtype_data = {
871 897
872static struct spi_imx_devtype_data imx21_cspi_devtype_data = { 898static struct spi_imx_devtype_data imx21_cspi_devtype_data = {
873 .intctrl = mx21_intctrl, 899 .intctrl = mx21_intctrl,
900 .prepare_message = mx21_prepare_message,
874 .config = mx21_config, 901 .config = mx21_config,
875 .trigger = mx21_trigger, 902 .trigger = mx21_trigger,
876 .rx_available = mx21_rx_available, 903 .rx_available = mx21_rx_available,
@@ -885,6 +912,7 @@ static struct spi_imx_devtype_data imx21_cspi_devtype_data = {
885static struct spi_imx_devtype_data imx27_cspi_devtype_data = { 912static struct spi_imx_devtype_data imx27_cspi_devtype_data = {
886 /* i.mx27 cspi shares the functions with i.mx21 one */ 913 /* i.mx27 cspi shares the functions with i.mx21 one */
887 .intctrl = mx21_intctrl, 914 .intctrl = mx21_intctrl,
915 .prepare_message = mx21_prepare_message,
888 .config = mx21_config, 916 .config = mx21_config,
889 .trigger = mx21_trigger, 917 .trigger = mx21_trigger,
890 .rx_available = mx21_rx_available, 918 .rx_available = mx21_rx_available,
@@ -898,6 +926,7 @@ static struct spi_imx_devtype_data imx27_cspi_devtype_data = {
898 926
899static struct spi_imx_devtype_data imx31_cspi_devtype_data = { 927static struct spi_imx_devtype_data imx31_cspi_devtype_data = {
900 .intctrl = mx31_intctrl, 928 .intctrl = mx31_intctrl,
929 .prepare_message = mx31_prepare_message,
901 .config = mx31_config, 930 .config = mx31_config,
902 .trigger = mx31_trigger, 931 .trigger = mx31_trigger,
903 .rx_available = mx31_rx_available, 932 .rx_available = mx31_rx_available,
@@ -912,6 +941,7 @@ static struct spi_imx_devtype_data imx31_cspi_devtype_data = {
912static struct spi_imx_devtype_data imx35_cspi_devtype_data = { 941static struct spi_imx_devtype_data imx35_cspi_devtype_data = {
913 /* i.mx35 and later cspi shares the functions with i.mx31 one */ 942 /* i.mx35 and later cspi shares the functions with i.mx31 one */
914 .intctrl = mx31_intctrl, 943 .intctrl = mx31_intctrl,
944 .prepare_message = mx31_prepare_message,
915 .config = mx31_config, 945 .config = mx31_config,
916 .trigger = mx31_trigger, 946 .trigger = mx31_trigger,
917 .rx_available = mx31_rx_available, 947 .rx_available = mx31_rx_available,
@@ -925,6 +955,7 @@ static struct spi_imx_devtype_data imx35_cspi_devtype_data = {
925 955
926static struct spi_imx_devtype_data imx51_ecspi_devtype_data = { 956static struct spi_imx_devtype_data imx51_ecspi_devtype_data = {
927 .intctrl = mx51_ecspi_intctrl, 957 .intctrl = mx51_ecspi_intctrl,
958 .prepare_message = mx51_ecspi_prepare_message,
928 .config = mx51_ecspi_config, 959 .config = mx51_ecspi_config,
929 .trigger = mx51_ecspi_trigger, 960 .trigger = mx51_ecspi_trigger,
930 .rx_available = mx51_ecspi_rx_available, 961 .rx_available = mx51_ecspi_rx_available,
@@ -940,6 +971,7 @@ static struct spi_imx_devtype_data imx51_ecspi_devtype_data = {
940 971
941static struct spi_imx_devtype_data imx53_ecspi_devtype_data = { 972static struct spi_imx_devtype_data imx53_ecspi_devtype_data = {
942 .intctrl = mx51_ecspi_intctrl, 973 .intctrl = mx51_ecspi_intctrl,
974 .prepare_message = mx51_ecspi_prepare_message,
943 .config = mx51_ecspi_config, 975 .config = mx51_ecspi_config,
944 .trigger = mx51_ecspi_trigger, 976 .trigger = mx51_ecspi_trigger,
945 .rx_available = mx51_ecspi_rx_available, 977 .rx_available = mx51_ecspi_rx_available,
@@ -1492,7 +1524,13 @@ spi_imx_prepare_message(struct spi_master *master, struct spi_message *msg)
1492 return ret; 1524 return ret;
1493 } 1525 }
1494 1526
1495 return 0; 1527 ret = spi_imx->devtype_data->prepare_message(spi_imx, msg);
1528 if (ret) {
1529 clk_disable(spi_imx->clk_ipg);
1530 clk_disable(spi_imx->clk_per);
1531 }
1532
1533 return ret;
1496} 1534}
1497 1535
1498static int 1536static int