Skip to content

Commit e697271

Browse files
Uwe Kleine-Königbroonie
authored andcommitted
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 <[email protected]> Signed-off-by: Mark Brown <[email protected]>
1 parent 6ab4a35 commit e697271

File tree

1 file changed

+39
-1
lines changed

1 file changed

+39
-1
lines changed

drivers/spi/spi-imx.c

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ struct spi_imx_data;
5959

6060
struct 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+
489496
static 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+
662675
static 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+
758777
static 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+
827852
static 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

859884
static 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

872898
static 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 = {
885912
static 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

899927
static 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 = {
912941
static 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

926956
static 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

941972
static 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

14981536
static int

0 commit comments

Comments
 (0)