提交 68fc6c83 编写于 作者: O Olof Johansson

Merge tag 'imx-soc-4.18' of...

Merge tag 'imx-soc-4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into next/soc

i.MX SoC update for 4.18:
 - A series from Bartosz to convert all i.MX plaform code using
   at24_platform_data to use at24 eeprom generic device properties.
 - Enable pinctrl driver support for i.MX6SLL SoC.
 - Clean up i.MX platform code using spi_imx platform data on outdated
   documentation and chip select array usage.

* tag 'imx-soc-4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux:
  ARM: imx: select imx6sll pinctrl when imx6sll enabled
  ARM: imx: pcm037: use device properties for at24 eeprom
  ARM: imx: pca100: use device properties for at24 eeprom
  ARM: imx: pcm043: use device properties for at24 eeprom
  ARM: imx: vpr200: drop at24_platform_data
  ARM: imx: Update spi_imx platform data to reflect current state
Signed-off-by: NOlof Johansson <olof@lixom.net>
...@@ -501,6 +501,7 @@ config SOC_IMX6SL ...@@ -501,6 +501,7 @@ config SOC_IMX6SL
config SOC_IMX6SLL config SOC_IMX6SLL
bool "i.MX6 SoloLiteLite support" bool "i.MX6 SoloLiteLite support"
select PINCTRL_IMX6SLL
select SOC_IMX6 select SOC_IMX6
help help
......
...@@ -374,26 +374,12 @@ static struct imx_ssi_platform_data mx31_3ds_ssi_pdata = { ...@@ -374,26 +374,12 @@ static struct imx_ssi_platform_data mx31_3ds_ssi_pdata = {
}; };
/* SPI */ /* SPI */
static int spi0_internal_chipselect[] = {
MXC_SPI_CS(0),
MXC_SPI_CS(1),
MXC_SPI_CS(2),
};
static const struct spi_imx_master spi0_pdata __initconst = { static const struct spi_imx_master spi0_pdata __initconst = {
.chipselect = spi0_internal_chipselect, .num_chipselect = 3,
.num_chipselect = ARRAY_SIZE(spi0_internal_chipselect),
};
static int spi1_internal_chipselect[] = {
MXC_SPI_CS(0),
MXC_SPI_CS(1),
MXC_SPI_CS(2),
}; };
static const struct spi_imx_master spi1_pdata __initconst = { static const struct spi_imx_master spi1_pdata __initconst = {
.chipselect = spi1_internal_chipselect, .num_chipselect = 3,
.num_chipselect = ARRAY_SIZE(spi1_internal_chipselect),
}; };
static struct spi_board_info mx31_3ds_spi_devs[] __initdata = { static struct spi_board_info mx31_3ds_spi_devs[] __initdata = {
......
...@@ -226,20 +226,12 @@ static void __init lilly1131_usb_init(void) ...@@ -226,20 +226,12 @@ static void __init lilly1131_usb_init(void)
/* SPI */ /* SPI */
static int spi_internal_chipselect[] = {
MXC_SPI_CS(0),
MXC_SPI_CS(1),
MXC_SPI_CS(2),
};
static const struct spi_imx_master spi0_pdata __initconst = { static const struct spi_imx_master spi0_pdata __initconst = {
.chipselect = spi_internal_chipselect, .num_chipselect = 3,
.num_chipselect = ARRAY_SIZE(spi_internal_chipselect),
}; };
static const struct spi_imx_master spi1_pdata __initconst = { static const struct spi_imx_master spi1_pdata __initconst = {
.chipselect = spi_internal_chipselect, .num_chipselect = 3,
.num_chipselect = ARRAY_SIZE(spi_internal_chipselect),
}; };
static struct mc13xxx_platform_data mc13783_pdata __initdata = { static struct mc13xxx_platform_data mc13783_pdata __initdata = {
......
...@@ -83,15 +83,8 @@ static const struct imxuart_platform_data uart_pdata __initconst = { ...@@ -83,15 +83,8 @@ static const struct imxuart_platform_data uart_pdata __initconst = {
}; };
/* SPI */ /* SPI */
static int spi0_internal_chipselect[] = {
MXC_SPI_CS(0),
MXC_SPI_CS(1),
MXC_SPI_CS(2),
};
static const struct spi_imx_master spi0_pdata __initconst = { static const struct spi_imx_master spi0_pdata __initconst = {
.chipselect = spi0_internal_chipselect, .num_chipselect = 3,
.num_chipselect = ARRAY_SIZE(spi0_internal_chipselect),
}; };
static const struct mxc_nand_platform_data static const struct mxc_nand_platform_data
...@@ -133,13 +126,8 @@ static struct platform_device smsc911x_device = { ...@@ -133,13 +126,8 @@ static struct platform_device smsc911x_device = {
* The MC13783 is the only hard-wired SPI device on the module. * The MC13783 is the only hard-wired SPI device on the module.
*/ */
static int spi1_internal_chipselect[] = {
MXC_SPI_CS(0),
};
static const struct spi_imx_master spi1_pdata __initconst = { static const struct spi_imx_master spi1_pdata __initconst = {
.chipselect = spi1_internal_chipselect, .num_chipselect = 1,
.num_chipselect = ARRAY_SIZE(spi1_internal_chipselect),
}; };
static struct mc13xxx_platform_data mc13783_pdata __initdata = { static struct mc13xxx_platform_data mc13783_pdata __initdata = {
......
...@@ -152,14 +152,8 @@ static const struct imxi2c_platform_data moboard_i2c1_data __initconst = { ...@@ -152,14 +152,8 @@ static const struct imxi2c_platform_data moboard_i2c1_data __initconst = {
.bitrate = 100000, .bitrate = 100000,
}; };
static int moboard_spi1_cs[] = {
MXC_SPI_CS(0),
MXC_SPI_CS(2),
};
static const struct spi_imx_master moboard_spi1_pdata __initconst = { static const struct spi_imx_master moboard_spi1_pdata __initconst = {
.chipselect = moboard_spi1_cs, .num_chipselect = 3,
.num_chipselect = ARRAY_SIZE(moboard_spi1_cs),
}; };
static struct regulator_consumer_supply sdhc_consumers[] = { static struct regulator_consumer_supply sdhc_consumers[] = {
...@@ -296,19 +290,14 @@ static struct spi_board_info moboard_spi_board_info[] __initdata = { ...@@ -296,19 +290,14 @@ static struct spi_board_info moboard_spi_board_info[] __initdata = {
/* irq number is run-time assigned */ /* irq number is run-time assigned */
.max_speed_hz = 300000, .max_speed_hz = 300000,
.bus_num = 1, .bus_num = 1,
.chip_select = 1, .chip_select = 0,
.platform_data = &moboard_pmic, .platform_data = &moboard_pmic,
.mode = SPI_CS_HIGH, .mode = SPI_CS_HIGH,
}, },
}; };
static int moboard_spi2_cs[] = {
MXC_SPI_CS(0), MXC_SPI_CS(1),
};
static const struct spi_imx_master moboard_spi2_pdata __initconst = { static const struct spi_imx_master moboard_spi2_pdata __initconst = {
.chipselect = moboard_spi2_cs, .num_chipselect = 2,
.num_chipselect = ARRAY_SIZE(moboard_spi2_cs),
}; };
#define SDHC1_CD IOMUX_TO_GPIO(MX31_PIN_ATA_CS0) #define SDHC1_CD IOMUX_TO_GPIO(MX31_PIN_ATA_CS0)
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/platform_data/at24.h> #include <linux/property.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/spi/eeprom.h> #include <linux/spi/eeprom.h>
...@@ -168,16 +168,15 @@ static const struct imxi2c_platform_data pca100_i2c1_data __initconst = { ...@@ -168,16 +168,15 @@ static const struct imxi2c_platform_data pca100_i2c1_data __initconst = {
.bitrate = 100000, .bitrate = 100000,
}; };
static struct at24_platform_data board_eeprom = { static const struct property_entry board_eeprom_properties[] = {
.byte_len = 4096, PROPERTY_ENTRY_U32("pagesize", 32),
.page_size = 32, { }
.flags = AT24_FLAG_ADDR16,
}; };
static struct i2c_board_info pca100_i2c_devices[] = { static struct i2c_board_info pca100_i2c_devices[] = {
{ {
I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ I2C_BOARD_INFO("24c32", 0x52), /* E0=0, E1=1, E2=0 */
.platform_data = &board_eeprom, .properties = board_eeprom_properties,
}, { }, {
I2C_BOARD_INFO("pcf8563", 0x51), I2C_BOARD_INFO("pcf8563", 0x51),
}, { }, {
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#include <linux/smsc911x.h> #include <linux/smsc911x.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/platform_data/at24.h> #include <linux/property.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/irq.h> #include <linux/irq.h>
...@@ -263,16 +263,15 @@ static const struct imxi2c_platform_data pcm037_i2c2_data __initconst = { ...@@ -263,16 +263,15 @@ static const struct imxi2c_platform_data pcm037_i2c2_data __initconst = {
.bitrate = 20000, .bitrate = 20000,
}; };
static struct at24_platform_data board_eeprom = { static const struct property_entry board_eeprom_properties[] = {
.byte_len = 4096, PROPERTY_ENTRY_U32("pagesize", 32),
.page_size = 32, { }
.flags = AT24_FLAG_ADDR16,
}; };
static struct i2c_board_info pcm037_i2c_devices[] = { static struct i2c_board_info pcm037_i2c_devices[] = {
{ {
I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ I2C_BOARD_INFO("24c32", 0x52), /* E0=0, E1=1, E2=0 */
.platform_data = &board_eeprom, .properties = board_eeprom_properties,
}, { }, {
I2C_BOARD_INFO("pcf8563", 0x51), I2C_BOARD_INFO("pcf8563", 0x51),
} }
......
...@@ -56,11 +56,8 @@ static struct spi_board_info pcm037_spi_dev[] = { ...@@ -56,11 +56,8 @@ static struct spi_board_info pcm037_spi_dev[] = {
}; };
/* Platform Data for MXC CSPI */ /* Platform Data for MXC CSPI */
static int pcm037_spi1_cs[] = { MXC_SPI_CS(0), MXC_SPI_CS(1), };
static const struct spi_imx_master pcm037_spi1_pdata __initconst = { static const struct spi_imx_master pcm037_spi1_pdata __initconst = {
.chipselect = pcm037_spi1_cs, .num_chipselect = 2,
.num_chipselect = ARRAY_SIZE(pcm037_spi1_cs),
}; };
/* GPIO-keys input device */ /* GPIO-keys input device */
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/platform_data/at24.h> #include <linux/property.h>
#include <linux/usb/otg.h> #include <linux/usb/otg.h>
#include <linux/usb/ulpi.h> #include <linux/usb/ulpi.h>
...@@ -110,16 +110,15 @@ static const struct imxi2c_platform_data pcm043_i2c0_data __initconst = { ...@@ -110,16 +110,15 @@ static const struct imxi2c_platform_data pcm043_i2c0_data __initconst = {
.bitrate = 50000, .bitrate = 50000,
}; };
static struct at24_platform_data board_eeprom = { static const struct property_entry board_eeprom_properties[] = {
.byte_len = 4096, PROPERTY_ENTRY_U32("pagesize", 32),
.page_size = 32, { }
.flags = AT24_FLAG_ADDR16,
}; };
static struct i2c_board_info pcm043_i2c_devices[] = { static struct i2c_board_info pcm043_i2c_devices[] = {
{ {
I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ I2C_BOARD_INFO("24c32", 0x52), /* E0=0, E1=1, E2=0 */
.platform_data = &board_eeprom, .properties = board_eeprom_properties,
}, { }, {
I2C_BOARD_INFO("pcf8563", 0x51), I2C_BOARD_INFO("pcf8563", 0x51),
}, },
......
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/platform_data/at24.h>
#include <linux/mfd/mc13xxx.h> #include <linux/mfd/mc13xxx.h>
#include "common.h" #include "common.h"
...@@ -145,15 +144,9 @@ static const struct imxi2c_platform_data vpr200_i2c0_data __initconst = { ...@@ -145,15 +144,9 @@ static const struct imxi2c_platform_data vpr200_i2c0_data __initconst = {
.bitrate = 50000, .bitrate = 50000,
}; };
static struct at24_platform_data vpr200_eeprom = {
.byte_len = 2048 / 8,
.page_size = 1,
};
static struct i2c_board_info vpr200_i2c_devices[] = { static struct i2c_board_info vpr200_i2c_devices[] = {
{ {
I2C_BOARD_INFO("at24", 0x50), /* E0=0, E1=0, E2=0 */ I2C_BOARD_INFO("24c02", 0x50), /* E0=0, E1=0, E2=0 */
.platform_data = &vpr200_eeprom,
}, { }, {
I2C_BOARD_INFO("mc13892", 0x08), I2C_BOARD_INFO("mc13892", 0x08),
.platform_data = &vpr200_pmic, .platform_data = &vpr200_pmic,
......
...@@ -5,24 +5,29 @@ ...@@ -5,24 +5,29 @@
/* /*
* struct spi_imx_master - device.platform_data for SPI controller devices. * struct spi_imx_master - device.platform_data for SPI controller devices.
* @chipselect: Array of chipselects for this master. Numbers >= 0 mean gpio * @chipselect: Array of chipselects for this master or NULL. Numbers >= 0
* pins, numbers < 0 mean internal CSPI chipselects according * mean GPIO pins, -ENOENT means internal CSPI chipselect
* to MXC_SPI_CS(). Normally you want to use gpio based chip * matching the position in the array. E.g., if chipselect[1] =
* selects as the CSPI module tries to be intelligent about * -ENOENT then a SPI slave using chip select 1 will use the
* when to assert the chipselect: The CSPI module deasserts the * native SS1 line of the CSPI. Omitting the array will use
* chipselect once it runs out of input data. The other problem * all native chip selects.
* is that it is not possible to mix between high active and low
* active chipselects on one single bus using the internal * Normally you want to use gpio based chip selects as the CSPI
* chipselects. Unfortunately Freescale decided to put some * module tries to be intelligent about when to assert the
* chipselect: The CSPI module deasserts the chipselect once it
* runs out of input data. The other problem is that it is not
* possible to mix between high active and low active chipselects
* on one single bus using the internal chipselects.
* Unfortunately, on some SoCs, Freescale decided to put some
* chipselects on dedicated pins which are not usable as gpios, * chipselects on dedicated pins which are not usable as gpios,
* so we have to support the internal chipselects. * so we have to support the internal chipselects.
* @num_chipselect: ARRAY_SIZE(chipselect) *
* @num_chipselect: If @chipselect is specified, ARRAY_SIZE(chipselect),
* otherwise the number of native chip selects.
*/ */
struct spi_imx_master { struct spi_imx_master {
int *chipselect; int *chipselect;
int num_chipselect; int num_chipselect;
}; };
#define MXC_SPI_CS(no) ((no) - 32)
#endif /* __MACH_SPI_H_*/ #endif /* __MACH_SPI_H_*/
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册