spicc: change txlx dts to use amlogic driver.

PD#164701: spicc: change txlx dts to use amlogic driver.

1. disable upstream dt and add amlogic dt on r311.
1. fix dirspi interface error for ldim.

Change-Id: Ia610cbb69ba03aea63fae8adbeb76579c0250de1
Signed-off-by: Sunny Luo <sunny.luo@amlogic.com>
This commit is contained in:
Sunny Luo
2018-04-25 11:26:03 +08:00
parent 48565d1644
commit 8356e607a5
5 changed files with 61 additions and 4 deletions

View File

@@ -657,6 +657,23 @@
status = "disabled";
};
spicc0: spicc0 {
compatible = "amlogic, spicc";
reg = <0x0 0x13000 0x0 0x40>;
clock-names = "spicc_clk";
clocks = <&clkc CLKID_SPICC0>;
device_id = <0>;
enhance = <1>;
ssctl = <0>;
dma_tx_threshold = <3>;
dma_num_per_read_burst = <13>;
dma_auto_param = <1>;
delay_control = <0x15>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
spicc_a: spi@13000 {
compatible = "amlogic,meson-txlx-spicc";
reg = <0x0 0x13000 0x0 0x3c>;

View File

@@ -1496,8 +1496,16 @@
&spicc_a {
status = "okay";
status = "disabled";
pinctrl-names = "default";
pinctrl-0 = <&spi_a_pins>;
cs-gpios = <&gpio GPIOZ_3 0>;
};
&spicc0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&spi_a_pins>;
cs-gpios = <&gpio GPIOZ_3 0>;
num_chipselect = <1>;
};

View File

@@ -1523,8 +1523,16 @@
&spicc_a {
status = "okay";
status = "disabled";
pinctrl-names = "default";
pinctrl-0 = <&spi_a_pins>;
cs-gpios = <&gpio GPIOZ_3 0>;
};
&spicc0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&spi_a_pins>;
cs-gpios = <&gpio GPIOZ_3 0>;
num_chipselect = <1>;
};

View File

@@ -1496,8 +1496,16 @@
&spicc_a {
status = "okay";
status = "disabled";
pinctrl-names = "default";
pinctrl-0 = <&spi_a_pins>;
cs-gpios = <&gpio GPIOZ_3 0>;
};
&spicc0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&spi_a_pins>;
cs-gpios = <&gpio GPIOZ_3 0>;
num_chipselect = <1>;
};

View File

@@ -283,6 +283,12 @@ static inline void spicc_set_flag(
spicc->flags &= ~(1<<flag);
}
static inline void spicc_main_clk_ao(struct spicc *spicc, bool on)
{
if (spicc_get_flag(spicc, FLAG_ENHANCE))
setb(spicc->regs, MAIN_CLK_AO, on);
}
static inline void spicc_set_bit_width(struct spicc *spicc, u8 bw)
{
setb(spicc->regs, CON_BITS_PER_WORD, bw-1);
@@ -305,6 +311,7 @@ static void spicc_set_mode(struct spicc *spicc, u8 mode)
if (mode == spicc->mode)
return;
spicc_main_clk_ao(spicc, 1);
spicc->mode = mode;
if (!spicc_get_flag(spicc, FLAG_ENHANCE)) {
if (cpol && !IS_ERR_OR_NULL(spicc->pullup))
@@ -312,9 +319,12 @@ static void spicc_set_mode(struct spicc *spicc, u8 mode)
else if (!cpol && !IS_ERR_OR_NULL(spicc->pulldown))
pinctrl_select_state(spicc->pinctrl, spicc->pulldown);
}
setb(spicc->regs, CON_CLK_PHA, cpha);
setb(spicc->regs, CON_CLK_POL, cpol);
setb(spicc->regs, LOOPBACK_EN, !!(mode & SPI_LOOP));
spicc_main_clk_ao(spicc, 0);
}
static void spicc_set_clk(struct spicc *spicc, int speed)
@@ -564,6 +574,7 @@ static int spicc_dma_xfer(struct spicc *spicc, struct spi_transfer *t)
spicc_reset_fifo(spicc);
setb(mem_base, CON_XCH, 0);
setb(mem_base, WAIT_CYCLES, spicc->speed >> 25);
spicc->remain = t->len / spicc->bytes_per_word;
if (t->tx_dma != INVALID_DMA_ADDRESS)
writel(t->tx_dma, mem_base + SPICC_REG_DRADDR);
if (t->rx_dma != INVALID_DMA_ADDRESS)
@@ -609,6 +620,7 @@ static int spicc_hw_xfer(struct spicc *spicc, u8 *txp, u8 *rxp, int len)
setb(mem_base, WAIT_CYCLES, 0);
spicc->txp = txp;
spicc->rxp = rxp;
spicc->remain = len / spicc->bytes_per_word;
spicc_log(spicc, &spicc->remain, 1, PIO_BEGIN);
if (spicc->irq) {
setb(mem_base, INT_XFER_COM_EN, 1);
@@ -726,6 +738,11 @@ static int spicc_setup(struct spi_device *spi)
spi->chip_select, spi->cs_gpio,
spi->mode, spi->max_speed_hz);
spicc_chip_select(spi, 0);
spicc_set_bit_width(spicc,
spi->bits_per_word ? : SPICC_DEFAULT_BIT_WIDTH);
spicc_set_clk(spicc,
spi->max_speed_hz ? : SPICC_DEFAULT_SPEED_HZ);
spicc_set_mode(spicc, spi->mode);
return 0;
}
@@ -765,7 +782,6 @@ static void spicc_handle_one_msg(struct spicc *spicc, struct spi_message *m)
if (t->delay_usecs >> 10)
udelay(t->delay_usecs >> 10);
spicc->remain = t->len / spicc->bytes_per_word;
spicc_set_flag(spicc, FLAG_DMA_EN, 0);
if (t->bits_per_word == 64) {
spicc_set_flag(spicc, FLAG_DMA_EN, 1);