Loading drivers/mfd/timberdale.c +0 −1 Original line number Diff line number Diff line Loading @@ -145,7 +145,6 @@ static struct spi_board_info timberdale_spi_8bit_board_info[] = { static struct xspi_platform_data timberdale_xspi_platform_data = { .num_chipselect = 3, .little_endian = true, /* bits per word and devices will be filled in runtime depending * on the HW config */ Loading drivers/spi/spi-xilinx.c +21 −9 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ */ #define XSPI_CR_OFFSET 0x60 /* Control Register */ #define XSPI_CR_LOOP 0x01 #define XSPI_CR_ENABLE 0x02 #define XSPI_CR_MASTER_MODE 0x04 #define XSPI_CR_CPOL 0x08 Loading Loading @@ -340,11 +341,12 @@ static const struct of_device_id xilinx_spi_of_match[] = { MODULE_DEVICE_TABLE(of, xilinx_spi_of_match); struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem, u32 irq, s16 bus_num, int num_cs, int little_endian, int bits_per_word) u32 irq, s16 bus_num, int num_cs, int bits_per_word) { struct spi_master *master; struct xilinx_spi *xspi; int ret; u32 tmp; master = spi_alloc_master(dev, sizeof(struct xilinx_spi)); if (!master) Loading Loading @@ -376,13 +378,25 @@ struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem, xspi->mem = *mem; xspi->irq = irq; if (little_endian) { /* * Detect endianess on the IP via loop bit in CR. Detection * must be done before reset is sent because incorrect reset * value generates error interrupt. * Setup little endian helper functions first and try to use them * and check if bit was correctly setup or not. */ xspi->read_fn = xspi_read32; xspi->write_fn = xspi_write32; } else { xspi->write_fn(XSPI_CR_LOOP, xspi->regs + XSPI_CR_OFFSET); tmp = xspi->read_fn(xspi->regs + XSPI_CR_OFFSET); tmp &= XSPI_CR_LOOP; if (tmp != XSPI_CR_LOOP) { xspi->read_fn = xspi_read32_be; xspi->write_fn = xspi_write32_be; } xspi->bits_per_word = bits_per_word; if (xspi->bits_per_word == 8) { xspi->tx_fn = xspi_tx8; Loading Loading @@ -446,14 +460,13 @@ static int xilinx_spi_probe(struct platform_device *dev) { struct xspi_platform_data *pdata; struct resource *r; int irq, num_cs = 0, little_endian = 0, bits_per_word = 8; int irq, num_cs = 0, bits_per_word = 8; struct spi_master *master; u8 i; pdata = dev->dev.platform_data; if (pdata) { num_cs = pdata->num_chipselect; little_endian = pdata->little_endian; bits_per_word = pdata->bits_per_word; } Loading Loading @@ -485,7 +498,7 @@ static int xilinx_spi_probe(struct platform_device *dev) return -ENXIO; master = xilinx_spi_init(&dev->dev, r, irq, dev->id, num_cs, little_endian, bits_per_word); bits_per_word); if (!master) return -ENODEV; Loading @@ -501,7 +514,6 @@ static int xilinx_spi_probe(struct platform_device *dev) static int xilinx_spi_remove(struct platform_device *dev) { xilinx_spi_deinit(platform_get_drvdata(dev)); platform_set_drvdata(dev, 0); return 0; } Loading include/linux/spi/xilinx_spi.h +0 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,6 @@ */ struct xspi_platform_data { u16 num_chipselect; bool little_endian; u8 bits_per_word; struct spi_board_info *devices; u8 num_devices; Loading Loading
drivers/mfd/timberdale.c +0 −1 Original line number Diff line number Diff line Loading @@ -145,7 +145,6 @@ static struct spi_board_info timberdale_spi_8bit_board_info[] = { static struct xspi_platform_data timberdale_xspi_platform_data = { .num_chipselect = 3, .little_endian = true, /* bits per word and devices will be filled in runtime depending * on the HW config */ Loading
drivers/spi/spi-xilinx.c +21 −9 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ */ #define XSPI_CR_OFFSET 0x60 /* Control Register */ #define XSPI_CR_LOOP 0x01 #define XSPI_CR_ENABLE 0x02 #define XSPI_CR_MASTER_MODE 0x04 #define XSPI_CR_CPOL 0x08 Loading Loading @@ -340,11 +341,12 @@ static const struct of_device_id xilinx_spi_of_match[] = { MODULE_DEVICE_TABLE(of, xilinx_spi_of_match); struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem, u32 irq, s16 bus_num, int num_cs, int little_endian, int bits_per_word) u32 irq, s16 bus_num, int num_cs, int bits_per_word) { struct spi_master *master; struct xilinx_spi *xspi; int ret; u32 tmp; master = spi_alloc_master(dev, sizeof(struct xilinx_spi)); if (!master) Loading Loading @@ -376,13 +378,25 @@ struct spi_master *xilinx_spi_init(struct device *dev, struct resource *mem, xspi->mem = *mem; xspi->irq = irq; if (little_endian) { /* * Detect endianess on the IP via loop bit in CR. Detection * must be done before reset is sent because incorrect reset * value generates error interrupt. * Setup little endian helper functions first and try to use them * and check if bit was correctly setup or not. */ xspi->read_fn = xspi_read32; xspi->write_fn = xspi_write32; } else { xspi->write_fn(XSPI_CR_LOOP, xspi->regs + XSPI_CR_OFFSET); tmp = xspi->read_fn(xspi->regs + XSPI_CR_OFFSET); tmp &= XSPI_CR_LOOP; if (tmp != XSPI_CR_LOOP) { xspi->read_fn = xspi_read32_be; xspi->write_fn = xspi_write32_be; } xspi->bits_per_word = bits_per_word; if (xspi->bits_per_word == 8) { xspi->tx_fn = xspi_tx8; Loading Loading @@ -446,14 +460,13 @@ static int xilinx_spi_probe(struct platform_device *dev) { struct xspi_platform_data *pdata; struct resource *r; int irq, num_cs = 0, little_endian = 0, bits_per_word = 8; int irq, num_cs = 0, bits_per_word = 8; struct spi_master *master; u8 i; pdata = dev->dev.platform_data; if (pdata) { num_cs = pdata->num_chipselect; little_endian = pdata->little_endian; bits_per_word = pdata->bits_per_word; } Loading Loading @@ -485,7 +498,7 @@ static int xilinx_spi_probe(struct platform_device *dev) return -ENXIO; master = xilinx_spi_init(&dev->dev, r, irq, dev->id, num_cs, little_endian, bits_per_word); bits_per_word); if (!master) return -ENODEV; Loading @@ -501,7 +514,6 @@ static int xilinx_spi_probe(struct platform_device *dev) static int xilinx_spi_remove(struct platform_device *dev) { xilinx_spi_deinit(platform_get_drvdata(dev)); platform_set_drvdata(dev, 0); return 0; } Loading
include/linux/spi/xilinx_spi.h +0 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,6 @@ */ struct xspi_platform_data { u16 num_chipselect; bool little_endian; u8 bits_per_word; struct spi_board_info *devices; u8 num_devices; Loading