@@ -59,6 +59,7 @@ struct spi_imx_data;
5959
6060struct spi_imx_devtype_data {
6161 void (* intctrl )(struct spi_imx_data * , int );
62+ int (* prepare_message )(struct spi_imx_data * , struct spi_message * );
6263 int (* config )(struct spi_device * );
6364 void (* trigger )(struct spi_imx_data * );
6465 int (* rx_available )(struct spi_imx_data * );
@@ -486,6 +487,12 @@ static void mx51_ecspi_disable(struct spi_imx_data *spi_imx)
486487 writel (ctrl , spi_imx -> base + MX51_ECSPI_CTRL );
487488}
488489
490+ static int mx51_ecspi_prepare_message (struct spi_imx_data * spi_imx ,
491+ struct spi_message * msg )
492+ {
493+ return 0 ;
494+ }
495+
489496static int mx51_ecspi_config (struct spi_device * spi )
490497{
491498 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)
659666 writel (reg , spi_imx -> base + MXC_CSPICTRL );
660667}
661668
669+ static int mx31_prepare_message (struct spi_imx_data * spi_imx ,
670+ struct spi_message * msg )
671+ {
672+ return 0 ;
673+ }
674+
662675static int mx31_config (struct spi_device * spi )
663676{
664677 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)
755768 writel (reg , spi_imx -> base + MXC_CSPICTRL );
756769}
757770
771+ static int mx21_prepare_message (struct spi_imx_data * spi_imx ,
772+ struct spi_message * msg )
773+ {
774+ return 0 ;
775+ }
776+
758777static int mx21_config (struct spi_device * spi )
759778{
760779 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)
824843 writel (reg , spi_imx -> base + MXC_CSPICTRL );
825844}
826845
846+ static int mx1_prepare_message (struct spi_imx_data * spi_imx ,
847+ struct spi_message * msg )
848+ {
849+ return 0 ;
850+ }
851+
827852static int mx1_config (struct spi_device * spi )
828853{
829854 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)
858883
859884static struct spi_imx_devtype_data imx1_cspi_devtype_data = {
860885 .intctrl = mx1_intctrl ,
886+ .prepare_message = mx1_prepare_message ,
861887 .config = mx1_config ,
862888 .trigger = mx1_trigger ,
863889 .rx_available = mx1_rx_available ,
@@ -871,6 +897,7 @@ static struct spi_imx_devtype_data imx1_cspi_devtype_data = {
871897
872898static struct spi_imx_devtype_data imx21_cspi_devtype_data = {
873899 .intctrl = mx21_intctrl ,
900+ .prepare_message = mx21_prepare_message ,
874901 .config = mx21_config ,
875902 .trigger = mx21_trigger ,
876903 .rx_available = mx21_rx_available ,
@@ -885,6 +912,7 @@ static struct spi_imx_devtype_data imx21_cspi_devtype_data = {
885912static struct spi_imx_devtype_data imx27_cspi_devtype_data = {
886913 /* i.mx27 cspi shares the functions with i.mx21 one */
887914 .intctrl = mx21_intctrl ,
915+ .prepare_message = mx21_prepare_message ,
888916 .config = mx21_config ,
889917 .trigger = mx21_trigger ,
890918 .rx_available = mx21_rx_available ,
@@ -898,6 +926,7 @@ static struct spi_imx_devtype_data imx27_cspi_devtype_data = {
898926
899927static struct spi_imx_devtype_data imx31_cspi_devtype_data = {
900928 .intctrl = mx31_intctrl ,
929+ .prepare_message = mx31_prepare_message ,
901930 .config = mx31_config ,
902931 .trigger = mx31_trigger ,
903932 .rx_available = mx31_rx_available ,
@@ -912,6 +941,7 @@ static struct spi_imx_devtype_data imx31_cspi_devtype_data = {
912941static struct spi_imx_devtype_data imx35_cspi_devtype_data = {
913942 /* i.mx35 and later cspi shares the functions with i.mx31 one */
914943 .intctrl = mx31_intctrl ,
944+ .prepare_message = mx31_prepare_message ,
915945 .config = mx31_config ,
916946 .trigger = mx31_trigger ,
917947 .rx_available = mx31_rx_available ,
@@ -925,6 +955,7 @@ static struct spi_imx_devtype_data imx35_cspi_devtype_data = {
925955
926956static struct spi_imx_devtype_data imx51_ecspi_devtype_data = {
927957 .intctrl = mx51_ecspi_intctrl ,
958+ .prepare_message = mx51_ecspi_prepare_message ,
928959 .config = mx51_ecspi_config ,
929960 .trigger = mx51_ecspi_trigger ,
930961 .rx_available = mx51_ecspi_rx_available ,
@@ -940,6 +971,7 @@ static struct spi_imx_devtype_data imx51_ecspi_devtype_data = {
940971
941972static struct spi_imx_devtype_data imx53_ecspi_devtype_data = {
942973 .intctrl = mx51_ecspi_intctrl ,
974+ .prepare_message = mx51_ecspi_prepare_message ,
943975 .config = mx51_ecspi_config ,
944976 .trigger = mx51_ecspi_trigger ,
945977 .rx_available = mx51_ecspi_rx_available ,
@@ -1492,7 +1524,13 @@ spi_imx_prepare_message(struct spi_master *master, struct spi_message *msg)
14921524 return ret ;
14931525 }
14941526
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 ;
14961534}
14971535
14981536static int
0 commit comments