From: Alain Péteut <alain.peteut@xxxxxxxxxxx> Consider gpiod chip selects, in which case channel 0 is used. Upstream-Status: Pending Signed-off-by: Alain Péteut <alain.peteut@xxxxxxxxxxx> --- drivers/spi/spi-omap2-mcspi.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c index 6ba9b0d7710b..12519519f0f6 100644 --- a/drivers/spi/spi-omap2-mcspi.c +++ b/drivers/spi/spi-omap2-mcspi.c @@ -266,6 +266,14 @@ static void omap2_mcspi_set_cs(struct spi_device *spi, bool enable) } } +static int omap2_get_channel_index(const struct spi_device *spi) +{ + if (spi->cs_gpiod) + return 0; + + return spi->chip_select; +} + static void omap2_mcspi_set_mode(struct spi_master *master) { struct omap2_mcspi *mcspi = spi_master_get_devdata(master); @@ -1062,8 +1070,8 @@ static int omap2_mcspi_setup(struct spi_device *spi) cs = kzalloc(sizeof(*cs), GFP_KERNEL); if (!cs) return -ENOMEM; - cs->base = mcspi->base + spi->chip_select * 0x14; - cs->phys = mcspi->phys + spi->chip_select * 0x14; + cs->base = mcspi->base + omap2_get_channel_index(spi) * 0x14; + cs->phys = mcspi->phys + omap2_get_channel_index(spi) * 0x14; cs->mode = 0; cs->chconf0 = 0; cs->chctrl0 = 0; @@ -1261,7 +1269,7 @@ static int omap2_mcspi_prepare_message(struct spi_master *master, { struct omap2_mcspi *mcspi = spi_master_get_devdata(master); struct omap2_mcspi_regs *ctx = &mcspi->ctx; - struct omap2_mcspi_cs *cs; + struct omap2_mcspi_cs *cs, *cur_cs = msg->spi->controller_state; /* Only a single channel can have the FORCE bit enabled * in its chconf0 register. @@ -1269,10 +1277,11 @@ static int omap2_mcspi_prepare_message(struct spi_master *master, * A FORCE can remain from a last transfer having cs_change enabled */ list_for_each_entry(cs, &ctx->cs, node) { - if (msg->spi->controller_state == cs) + if (cur_cs == cs) continue; - if ((cs->chconf0 & OMAP2_MCSPI_CHCONF_FORCE)) { + if ((cs->chconf0 & OMAP2_MCSPI_CHCONF_FORCE && + cs->base != cur_cs->base)) { cs->chconf0 &= ~OMAP2_MCSPI_CHCONF_FORCE; writel_relaxed(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0); base-commit: 88690811da69826fdb59d908a6e5e9d0c63b581a prerequisite-patch-id: 7a234a8c0536cda1dc91514bddb2f083d8d666cf prerequisite-patch-id: 01c2349d2974d82d3ca247376ef662af76c36e00 prerequisite-patch-id: d1073b7d7d83b86d24982c6ce6760c3d3e45c384 prerequisite-patch-id: 20ffb9fa23d00d67cbbdfa2f844f94dfb3a8f46a prerequisite-patch-id: a47109b77bed675b663c80fc05eda78dabe6033b prerequisite-patch-id: 83a34f6d7ca32d93dece10251e56b32539ac231e prerequisite-patch-id: 4a0df403305f1ad7fa2ca4e5deb6dd4f5316ae1d prerequisite-patch-id: 8bc4935e31918f5c1536c4e24e26fae9c5d56d8d prerequisite-patch-id: b3e4cdfeecdb49f35cc812e8aa93380870eb971d prerequisite-patch-id: 3c05cf476520c48fa72e8f0532d7b8bbc8a6669f prerequisite-patch-id: 01111a1e598cfafa7cc9053b5dacf409cef752d4 prerequisite-patch-id: a6a254ae73657aac27fceb77e998d36d776bb945 prerequisite-patch-id: dc0f9db10774a3d0fa084d8be4cf45673d382d05 prerequisite-patch-id: abdbc1894b50d94126e784dc87a40f8dc367609a prerequisite-patch-id: d27844ef50a0ce4402b4660f765027dd55a971ff prerequisite-patch-id: ea542d6a43949fa3d92176d204c464b5d8d2eaf8 prerequisite-patch-id: 6699a5e206e5d57316bcc46cded20fd12dabac64 prerequisite-patch-id: d2e8a366c84dfeba2c0957163fd9ab4f89b07f37 prerequisite-patch-id: 9637656b8d8645f779f5be6a7ca457e71d077727 prerequisite-patch-id: bda5faf0c1da291fc591cd19b1b9db95a22c3575 prerequisite-patch-id: 57501aaf0ab3cfc94c898f875d63349c89a46386 prerequisite-patch-id: ab18d19294365b37c5dcd60195a66552eb9c1cde prerequisite-patch-id: 4bfb8bc3cb184f631d9664c047e64b95f04e0661 prerequisite-patch-id: 2b6b7716667c29aae9d6bf7dd60b3d81b1ba943f prerequisite-patch-id: 75655305636f677f58696b85bedb606b70d4bf04 prerequisite-patch-id: 6b1cb16a0bac172401d259ea6576ea8a466b0fc7 prerequisite-patch-id: 7e3e785900d025ae3b180b75ee34e777765d880e prerequisite-patch-id: 4c2e45e422050e642d46e6aa09a69ef7e079e45c prerequisite-patch-id: b590b648b8a13609bd684b5d5aa761862c800d18 prerequisite-patch-id: 3ad0c491adf37c454380caba882ecad58fd01d90 prerequisite-patch-id: 60aee342d1a638c0caa03615f840157c5ebc7b47 prerequisite-patch-id: fbc6a7676195e95978cc9146f3ed663152945da8 prerequisite-patch-id: 9b740983ed186d32e2f95053637e6a34d6dbd86d prerequisite-patch-id: 5da6d2e76b08013d3f1647a0d399f22ac9c40b87 prerequisite-patch-id: e51b9e99da9f0dfb3f0b077ddeea827670a0352f prerequisite-patch-id: 301ff6c13cb7e24f53135414b30a43634cf1a9b4 prerequisite-patch-id: 52d5222c90a11408324824694f53b74c55d8c6fa prerequisite-patch-id: e1188536ae5f0895a2f22771a4021c72c5f2c589 prerequisite-patch-id: f0e721d90fa583c8344c83e83f0c95b2e975af26 prerequisite-patch-id: 822a1f0ec6f5045997542a45fd59b4452031bd46 prerequisite-patch-id: 7ce932809ec6bb5cde99f0e3b2e60ceb013315a5 prerequisite-patch-id: 913b2a7cda1e1f8af04822a32161e8649328cfb1 prerequisite-patch-id: e78432e9441d034c25ef3c837f51797dc20e9d28 prerequisite-patch-id: f9896d99600d8a2a5c817b86ef68b78b5185a009 prerequisite-patch-id: a8ab762262a02d8f30b819e92ff62cefa78d940a prerequisite-patch-id: e88134ee667f27d6c7466f66b4ef9732c4b60e44 prerequisite-patch-id: 46b8b11abf42558c97e6330c857434c85460b765 prerequisite-patch-id: 1acb898f7dbccd18015afc49e938cbf136eb0474 prerequisite-patch-id: 68ad68c986d2aa7fd6be7da950e18859c5dbeaf7 prerequisite-patch-id: 199d26502b482da691c0f120494ae60d97a02fbc prerequisite-patch-id: bcfa60c3241a0b870ea4a0a4542ff2a706e1c7ef prerequisite-patch-id: 4fd07d8f84fc4dcb1a4693f068cfd66f5476a257 prerequisite-patch-id: ba949404f5aacfed3696566bddcd6a88c267051a prerequisite-patch-id: 1a8e877f64a3e9a045d4a1f219ee574a03b735a3 prerequisite-patch-id: 7f007ec4664ed50c59a6e17e09a94eb5458654b5 prerequisite-patch-id: c4d2fd90ffd576a9d1275670a58a635417704a1a prerequisite-patch-id: 78eb21692fa9b31524eb3e3063a6ce814e736056 prerequisite-patch-id: 92d2dcca06c6afb3702810cb7dcc4f2069e261a4 prerequisite-patch-id: a76f7712d71e566b78952abb8c2e7c7b88640e9a prerequisite-patch-id: d7948eb62bcaa1682b6500921e703c39d2056737 prerequisite-patch-id: 5c2e29c76850cfa430c0fc5f028e8977a1c5e522 prerequisite-patch-id: 5d9467b4ffa7f46327fbd3411f6a9d1c4538ba1d prerequisite-patch-id: f6de8daa45a99740be15066b32245f5c1628bafc prerequisite-patch-id: ecd701a80ef3f7030c3b7c02522cba3094bf43e9 prerequisite-patch-id: b9ffc0d7a91111690077a8d072dc884dc19bb7ab prerequisite-patch-id: ad3b2b58ed31c4615eee856c069471405927e1a4 prerequisite-patch-id: 8ba1fa50048b1f4f7f8cbe121471ff4a625fffa5 prerequisite-patch-id: 16052ac149497aa67692d67576adfc5cfc595dc3 prerequisite-patch-id: 786a032663ae515cf4cc830d896a2dde065505e6 prerequisite-patch-id: 4a680dfa3b536343c57b36b99885ee791516cc70 prerequisite-patch-id: 4b7d409ea636b5439ee404ffe9f94d50f76011ba prerequisite-patch-id: 72c9c0e469a943efa26f30cf6d2753837daa8619 prerequisite-patch-id: 2ab32bcbeb78b0435353d5661c619479aa0f1a1d prerequisite-patch-id: a3aeeca5625b7fb8c2c053968916b3d405172052 prerequisite-patch-id: 3be43a12d4957904b295c4e767f340c23da356cc prerequisite-patch-id: f88eb08ca2f79cca30027857e5bfe9a73fe72084 prerequisite-patch-id: 1c42d9022b972a96d90a1695590c6bcd38fc19f6 prerequisite-patch-id: a9d84d309ee09b6c76682e45dec68fba80336f38 prerequisite-patch-id: 55cfb44dc1939e3c417b072ce7684384a6782d83 prerequisite-patch-id: e0b07e5ff3c351fae8f69769c107d3accf6887d0 prerequisite-patch-id: f83e7af8dc45f72cce7d5eaba33d1e5ff359544a prerequisite-patch-id: bd29457895293d8408c62abce17110a0e839db39 prerequisite-patch-id: 105c923ae3bd1367551ca218bd0d23aa00fccbe1 prerequisite-patch-id: 56606bbfa6a4bf0d9e668198ec0a2ae91675c325 prerequisite-patch-id: 644ac8bd901add9f666eb67fed3b6d72eaac7b2f prerequisite-patch-id: 187d848bc59cc97644e103abf1f22a41d2e52b0c prerequisite-patch-id: 48ae7c2f7a12b4485b71cb52ed58fd65d22be2fa prerequisite-patch-id: f4030e29fa3845d01f40c5f9b9f774389d6776c6 prerequisite-patch-id: f6a250824717a6049823ab935e730dccb7214442 prerequisite-patch-id: cd4dafc24d799219b22f94ae1db0a40ce718b432 prerequisite-patch-id: 7fcbace9120a8a8481cc19ee4dd6228d522b449d prerequisite-patch-id: b84cfdfd1e0247179deb5e5c2bb8b06a32e59e16 prerequisite-patch-id: 35eaf9c996e696dd90c04cb3fb832a36bda06573 prerequisite-patch-id: 30b417c09caf630c21bf925e751ed936001e5541 prerequisite-patch-id: e88138e960a179d98db32c32e170ad731069c42c prerequisite-patch-id: 3676df39a17496888e2557f652707ebff4053a2b prerequisite-patch-id: 9869709efcf8381edef7ff2eaffb3dc5a33cbc35 prerequisite-patch-id: d26b9c0c4097e701924a9c5bc37f3fc5299c9f74 prerequisite-patch-id: d2d923adf83fbf243a408e69f05ee5f72b78297c prerequisite-patch-id: 5e8bac61b4c4e20679104a4a29e615e7207e224d -- 2.42.0