]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
spi: mediatek: add SPI_CS_HIGH support
authorLuhua Xu <luhua.xu@mediatek.com>
Mon, 18 Nov 2019 04:57:16 +0000 (12:57 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 18 Nov 2019 17:47:00 +0000 (17:47 +0000)
Change to use SPI_CS_HIGH to support spi CS polarity setting
for chips support enhance_timing.

Signed-off-by: Luhua Xu <luhua.xu@mediatek.com>
Link: https://lore.kernel.org/r/1574053037-26721-2-git-send-email-luhua.xu@mediatek.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-mt65xx.c
include/linux/platform_data/spi-mt65xx.h

index 25fe149a8d9a58b5fadbd0ea293a21427f8d1ada..6783e12c40c22ecbd9b808c96122702146bd28a1 100644 (file)
@@ -139,7 +139,6 @@ static const struct mtk_spi_compatible mt8183_compat = {
  * supplies it.
  */
 static const struct mtk_chip_config mtk_default_chip_info = {
-       .cs_pol = 0,
        .sample_sel = 0,
 };
 
@@ -230,10 +229,12 @@ static int mtk_spi_prepare_message(struct spi_master *master,
 #endif
 
        if (mdata->dev_comp->enhance_timing) {
-               if (chip_config->cs_pol)
+               /* set CS polarity */
+               if (spi->mode & SPI_CS_HIGH)
                        reg_val |= SPI_CMD_CS_POL;
                else
                        reg_val &= ~SPI_CMD_CS_POL;
+
                if (chip_config->sample_sel)
                        reg_val |= SPI_CMD_SAMPLE_SEL;
                else
@@ -264,6 +265,9 @@ static void mtk_spi_set_cs(struct spi_device *spi, bool enable)
        u32 reg_val;
        struct mtk_spi *mdata = spi_master_get_devdata(spi->master);
 
+       if (spi->mode & SPI_CS_HIGH)
+               enable = !enable;
+
        reg_val = readl(mdata->base + SPI_CMD_REG);
        if (!enable) {
                reg_val |= SPI_CMD_PAUSE_EN;
@@ -646,6 +650,10 @@ static int mtk_spi_probe(struct platform_device *pdev)
 
        mdata = spi_master_get_devdata(master);
        mdata->dev_comp = of_id->data;
+
+       if (mdata->dev_comp->enhance_timing)
+               master->mode_bits |= SPI_CS_HIGH;
+
        if (mdata->dev_comp->must_tx)
                master->flags = SPI_MASTER_MUST_TX;
 
index f0e6d6483e6279f7bfb2e46c825f65cfc9727d14..65fd5ffd257c00f6ce6129fe7d34b39c4f2497d1 100644 (file)
@@ -11,7 +11,6 @@
 
 /* Board specific platform_data */
 struct mtk_chip_config {
-       u32 cs_pol;
        u32 sample_sel;
 };
 #endif