aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2018-11-30 01:47:05 -0500
committerMark Brown <broonie@kernel.org>2018-12-11 06:57:13 -0500
commite697271c4e2987b333148e16a2eb8b5b924fd40a (patch)
tree5e82739ed28daa201719a77b99c430e2646047b6
parent6ab4a3502923c20c5a6921868e787e5fd033409b (diff)
spi: imx: add a device specific prepare_message callback
This is just preparatory work which allows to move some initialisation that currently is done in the per transfer hook .config to an earlier point in time in the next few patches. There is no change in behaviour introduced by this patch. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Mark Brown <broonie@kernel.org>
-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