Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cfa9a63a authored by David Brownell's avatar David Brownell Committed by Tony Lindgren
Browse files

ARM: OMAP: fix omap i2c init (regression)



In mainline, the "old style" I2C registration was only removed for
OMAP2, leading to init-time bugs (regressions) like:

    sysfs: duplicate filename 'i2c_omap.1' can not be created
    ------------[ cut here ]------------
    WARNING: at fs/sysfs/dir.c:424 sysfs_add_one+0x40/0xd4()
    Modules linked in:
    	... deletia ...
    [<c0036a38>] (omap_init_i2c+0x0/0x50) from [<c000cea8>] (omap_init_devices+0x10/0x24)
     r4:c001e000
    [<c000ce98>] (omap_init_devices+0x0/0x24) from [<c0008684>] (do_initcalls+0x78/0x200)
    	... deletia ...
    ---[ end trace ca143223eefdc828 ]---
    kobject_add_internal failed for i2c_omap.1 with -EEXIST, don't try to register things with the same name in the same directory.

The fix is obvious:  remove the old init code, it's no longer needed.

Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 8ba55c5c
Loading
Loading
Loading
Loading
+0 −63
Original line number Diff line number Diff line
@@ -88,68 +88,6 @@ EXPORT_SYMBOL(dsp_kfunc_device_register);
static inline void omap_init_dsp(void) { }
#endif	/* CONFIG_OMAP_DSP */

/*-------------------------------------------------------------------------*/
#if	defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)

#define	OMAP1_I2C_BASE		0xfffb3800
#define OMAP2_I2C_BASE1		0x48070000
#define OMAP_I2C_SIZE		0x3f
#define OMAP1_I2C_INT		INT_I2C
#define OMAP2_I2C_INT1		56

static struct resource i2c_resources1[] = {
	{
		.start		= 0,
		.end		= 0,
		.flags		= IORESOURCE_MEM,
	},
	{
		.start		= 0,
		.flags		= IORESOURCE_IRQ,
	},
};

/* DMA not used; works around erratum writing to non-empty i2c fifo */

static struct platform_device omap_i2c_device1 = {
	.name           = "i2c_omap",
	.id             = 1,
	.num_resources	= ARRAY_SIZE(i2c_resources1),
	.resource	= i2c_resources1,
};

/* See also arch/arm/mach-omap2/devices.c for second I2C on 24xx */
static void omap_init_i2c(void)
{
	if (cpu_is_omap24xx()) {
		i2c_resources1[0].start = OMAP2_I2C_BASE1;
		i2c_resources1[0].end = OMAP2_I2C_BASE1 + OMAP_I2C_SIZE;
		i2c_resources1[1].start = OMAP2_I2C_INT1;
	} else {
		i2c_resources1[0].start = OMAP1_I2C_BASE;
		i2c_resources1[0].end = OMAP1_I2C_BASE + OMAP_I2C_SIZE;
		i2c_resources1[1].start = OMAP1_I2C_INT;
	}

	/* FIXME define and use a boot tag, in case of boards that
	 * either don't wire up I2C, or chips that mux it differently...
	 * it can include clocking and address info, maybe more.
	 */
	if (cpu_is_omap24xx()) {
		omap_cfg_reg(M19_24XX_I2C1_SCL);
		omap_cfg_reg(L15_24XX_I2C1_SDA);
	} else {
		omap_cfg_reg(I2C_SCL);
		omap_cfg_reg(I2C_SDA);
	}

	(void) platform_device_register(&omap_i2c_device1);
}

#else
static inline void omap_init_i2c(void) {}
#endif

/*-------------------------------------------------------------------------*/
#if	defined(CONFIG_KEYBOARD_OMAP) || defined(CONFIG_KEYBOARD_OMAP_MODULE)

@@ -501,7 +439,6 @@ static int __init omap_init_devices(void)
	 * in alphabetical order so they're easier to sort through.
	 */
	omap_init_dsp();
	omap_init_i2c();
	omap_init_kp();
	omap_init_mmc();
	omap_init_uwire();