Merge branch 'i2c-embedded/for-next' of git://git.pengutronix.de/git/wsa/linux
Pull i2c-embedded changes from Wolfram Sang: - CBUS driver (an I2C variant) - continued rework of the omap driver - s3c2410 gets lots of fixes and gains pinctrl support - at91 gains DMA support - the GPIO muxer gains devicetree probing - typical fixes and additions all over * 'i2c-embedded/for-next' of git://git.pengutronix.de/git/wsa/linux: (45 commits) i2c: omap: Remove the OMAP_I2C_FLAG_RESET_REGS_POSTIDLE flag i2c: at91: add dma support i2c: at91: change struct members indentation i2c: at91: fix compilation warning i2c: mxs: Do not disable the I2C SMBus quick mode i2c: mxs: Handle i2c DMA failure properly i2c: s3c2410: Remove recently introduced performance overheads i2c: ocores: Move grlib set/get functions into #ifdef CONFIG_OF block i2c: s3c2410: Add fix for i2c suspend/resume i2c: s3c2410: Fix code to free gpios i2c: i2c-cbus-gpio: introduce driver i2c: ocores: Add support for the GRLIB port of the controller and use function pointers for getreg and setreg functions i2c: ocores: Add irq support for sparc i2c: omap: Move the remove constraint ARM: dts: cfa10049: Add the i2c muxer buses to the CFA-10049 i2c: s3c2410: do not special case HDMIPHY stuck bus detection i2c: s3c2410: use exponential back off while polling for bus idle i2c: s3c2410: do not generate STOP for QUIRK_HDMIPHY i2c: s3c2410: grab adapter lock while changing i2c clock i2c: s3c2410: Add support for pinctrl ...
此提交包含在:
@@ -16,10 +16,12 @@
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/usb/musb.h>
|
||||
#include <linux/platform_data/i2c-cbus-gpio.h>
|
||||
#include <linux/platform_data/spi-omap2-mcspi.h>
|
||||
#include <linux/platform_data/mtd-onenand-omap2.h>
|
||||
#include <linux/mfd/menelaus.h>
|
||||
@@ -40,6 +42,45 @@
|
||||
#define TUSB6010_GPIO_ENABLE 0
|
||||
#define TUSB6010_DMACHAN 0x3f
|
||||
|
||||
#if defined(CONFIG_I2C_CBUS_GPIO) || defined(CONFIG_I2C_CBUS_GPIO_MODULE)
|
||||
static struct i2c_cbus_platform_data n8x0_cbus_data = {
|
||||
.clk_gpio = 66,
|
||||
.dat_gpio = 65,
|
||||
.sel_gpio = 64,
|
||||
};
|
||||
|
||||
static struct platform_device n8x0_cbus_device = {
|
||||
.name = "i2c-cbus-gpio",
|
||||
.id = 3,
|
||||
.dev = {
|
||||
.platform_data = &n8x0_cbus_data,
|
||||
},
|
||||
};
|
||||
|
||||
static struct i2c_board_info n8x0_i2c_board_info_3[] __initdata = {
|
||||
{
|
||||
I2C_BOARD_INFO("retu-mfd", 0x01),
|
||||
},
|
||||
};
|
||||
|
||||
static void __init n8x0_cbus_init(void)
|
||||
{
|
||||
const int retu_irq_gpio = 108;
|
||||
|
||||
if (gpio_request_one(retu_irq_gpio, GPIOF_IN, "Retu IRQ"))
|
||||
return;
|
||||
irq_set_irq_type(gpio_to_irq(retu_irq_gpio), IRQ_TYPE_EDGE_RISING);
|
||||
n8x0_i2c_board_info_3[0].irq = gpio_to_irq(retu_irq_gpio);
|
||||
i2c_register_board_info(3, n8x0_i2c_board_info_3,
|
||||
ARRAY_SIZE(n8x0_i2c_board_info_3));
|
||||
platform_device_register(&n8x0_cbus_device);
|
||||
}
|
||||
#else /* CONFIG_I2C_CBUS_GPIO */
|
||||
static void __init n8x0_cbus_init(void)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_I2C_CBUS_GPIO */
|
||||
|
||||
#if defined(CONFIG_USB_MUSB_TUSB6010) || defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
|
||||
/*
|
||||
* Enable or disable power to TUSB6010. When enabling, turn on 3.3 V and
|
||||
@@ -678,6 +719,7 @@ static void __init n8x0_init_machine(void)
|
||||
gpmc_onenand_init(board_onenand_data);
|
||||
n8x0_mmc_init();
|
||||
n8x0_usb_init();
|
||||
n8x0_cbus_init();
|
||||
}
|
||||
|
||||
MACHINE_START(NOKIA_N800, "Nokia N800")
|
||||
|
@@ -120,6 +120,16 @@ static int __init omap_i2c_nr_ports(void)
|
||||
return ports;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX This function is a temporary compatibility wrapper - only
|
||||
* needed until the I2C driver can be converted to call
|
||||
* omap_pm_set_max_dev_wakeup_lat() and handle a return code.
|
||||
*/
|
||||
static void omap_pm_set_max_mpu_wakeup_lat_compat(struct device *dev, long t)
|
||||
{
|
||||
omap_pm_set_max_mpu_wakeup_lat(dev, t);
|
||||
}
|
||||
|
||||
static const char name[] = "omap_i2c";
|
||||
|
||||
int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata,
|
||||
@@ -157,6 +167,15 @@ int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata,
|
||||
dev_attr = (struct omap_i2c_dev_attr *)oh->dev_attr;
|
||||
pdata->flags = dev_attr->flags;
|
||||
|
||||
/*
|
||||
* When waiting for completion of a i2c transfer, we need to
|
||||
* set a wake up latency constraint for the MPU. This is to
|
||||
* ensure quick enough wakeup from idle, when transfer
|
||||
* completes.
|
||||
* Only omap3 has support for constraints
|
||||
*/
|
||||
if (cpu_is_omap34xx())
|
||||
pdata->set_mpu_wkup_lat = omap_pm_set_max_mpu_wakeup_lat_compat;
|
||||
pdev = omap_device_build(name, bus_id, oh, pdata,
|
||||
sizeof(struct omap_i2c_bus_platform_data),
|
||||
NULL, 0, 0);
|
||||
|
@@ -77,8 +77,7 @@ static struct omap_hwmod_class i2c_class = {
|
||||
|
||||
static struct omap_i2c_dev_attr i2c_dev_attr = {
|
||||
.fifo_depth = 8, /* bytes */
|
||||
.flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 |
|
||||
OMAP_I2C_FLAG_BUS_SHIFT_2 |
|
||||
.flags = OMAP_I2C_FLAG_BUS_SHIFT_2 |
|
||||
OMAP_I2C_FLAG_FORCE_19200_INT_CLK,
|
||||
};
|
||||
|
||||
|
@@ -1118,8 +1118,7 @@ static struct omap_hwmod_class i2c_class = {
|
||||
};
|
||||
|
||||
static struct omap_i2c_dev_attr i2c_dev_attr = {
|
||||
.flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE |
|
||||
OMAP_I2C_FLAG_RESET_REGS_POSTIDLE,
|
||||
.flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE,
|
||||
};
|
||||
|
||||
/* i2c1 */
|
||||
|
@@ -794,9 +794,7 @@ static struct omap_hwmod omap3xxx_dss_venc_hwmod = {
|
||||
/* I2C1 */
|
||||
static struct omap_i2c_dev_attr i2c1_dev_attr = {
|
||||
.fifo_depth = 8, /* bytes */
|
||||
.flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 |
|
||||
OMAP_I2C_FLAG_RESET_REGS_POSTIDLE |
|
||||
OMAP_I2C_FLAG_BUS_SHIFT_2,
|
||||
.flags = OMAP_I2C_FLAG_BUS_SHIFT_2,
|
||||
};
|
||||
|
||||
static struct omap_hwmod omap3xxx_i2c1_hwmod = {
|
||||
@@ -821,9 +819,7 @@ static struct omap_hwmod omap3xxx_i2c1_hwmod = {
|
||||
/* I2C2 */
|
||||
static struct omap_i2c_dev_attr i2c2_dev_attr = {
|
||||
.fifo_depth = 8, /* bytes */
|
||||
.flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 |
|
||||
OMAP_I2C_FLAG_RESET_REGS_POSTIDLE |
|
||||
OMAP_I2C_FLAG_BUS_SHIFT_2,
|
||||
.flags = OMAP_I2C_FLAG_BUS_SHIFT_2,
|
||||
};
|
||||
|
||||
static struct omap_hwmod omap3xxx_i2c2_hwmod = {
|
||||
@@ -848,9 +844,7 @@ static struct omap_hwmod omap3xxx_i2c2_hwmod = {
|
||||
/* I2C3 */
|
||||
static struct omap_i2c_dev_attr i2c3_dev_attr = {
|
||||
.fifo_depth = 64, /* bytes */
|
||||
.flags = OMAP_I2C_FLAG_APPLY_ERRATA_I207 |
|
||||
OMAP_I2C_FLAG_RESET_REGS_POSTIDLE |
|
||||
OMAP_I2C_FLAG_BUS_SHIFT_2,
|
||||
.flags = OMAP_I2C_FLAG_BUS_SHIFT_2,
|
||||
};
|
||||
|
||||
static struct omap_hwmod_irq_info i2c3_mpu_irqs[] = {
|
||||
|
@@ -1529,8 +1529,7 @@ static struct omap_hwmod_class omap44xx_i2c_hwmod_class = {
|
||||
};
|
||||
|
||||
static struct omap_i2c_dev_attr i2c_dev_attr = {
|
||||
.flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE |
|
||||
OMAP_I2C_FLAG_RESET_REGS_POSTIDLE,
|
||||
.flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE,
|
||||
};
|
||||
|
||||
/* i2c1 */
|
||||
|
新增問題並參考
封鎖使用者