Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 182047
b: refs/heads/master
c: f41c3c1
h: refs/heads/master
i:
  182045: ec01f8d
  182043: 565d95c
  182039: d8033ae
  182031: 37433f1
  182015: 2aa4647
v: v3
  • Loading branch information
David Daney authored and Ralf Baechle committed Feb 27, 2010
1 parent 00962b9 commit 4b48850
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d38760ccdf879a8648be53488227bf7fe597792d
refs/heads/master: f41c3c1b3ed53440b37445712f8e1048a39d7001
72 changes: 72 additions & 0 deletions trunk/arch/mips/cavium-octeon/octeon-platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,78 @@ static int __init octeon_rng_device_init(void)
}
device_initcall(octeon_rng_device_init);


#define OCTEON_I2C_IO_BASE 0x1180000001000ull
#define OCTEON_I2C_IO_UNIT_OFFSET 0x200

static struct octeon_i2c_data octeon_i2c_data[2];

static int __init octeon_i2c_device_init(void)
{
struct platform_device *pd;
int ret = 0;
int port, num_ports;

struct resource i2c_resources[] = {
{
.flags = IORESOURCE_MEM,
}, {
.flags = IORESOURCE_IRQ,
}
};

if (OCTEON_IS_MODEL(OCTEON_CN56XX) || OCTEON_IS_MODEL(OCTEON_CN52XX))
num_ports = 2;
else
num_ports = 1;

for (port = 0; port < num_ports; port++) {
octeon_i2c_data[port].sys_freq = octeon_get_clock_rate();
/*FIXME: should be examined. At the moment is set for 100Khz */
octeon_i2c_data[port].i2c_freq = 100000;

pd = platform_device_alloc("i2c-octeon", port);
if (!pd) {
ret = -ENOMEM;
goto out;
}

pd->dev.platform_data = octeon_i2c_data + port;

i2c_resources[0].start =
OCTEON_I2C_IO_BASE + (port * OCTEON_I2C_IO_UNIT_OFFSET);
i2c_resources[0].end = i2c_resources[0].start + 0x1f;
switch (port) {
case 0:
i2c_resources[1].start = OCTEON_IRQ_TWSI;
i2c_resources[1].end = OCTEON_IRQ_TWSI;
break;
case 1:
i2c_resources[1].start = OCTEON_IRQ_TWSI2;
i2c_resources[1].end = OCTEON_IRQ_TWSI2;
break;
default:
BUG();
}

ret = platform_device_add_resources(pd,
i2c_resources,
ARRAY_SIZE(i2c_resources));
if (ret)
goto fail;

ret = platform_device_add(pd);
if (ret)
goto fail;
}
return ret;
fail:
platform_device_put(pd);
out:
return ret;
}
device_initcall(octeon_i2c_device_init);

/* Octeon SMI/MDIO interface. */
static int __init octeon_mdiobus_device_init(void)
{
Expand Down
5 changes: 5 additions & 0 deletions trunk/arch/mips/include/asm/octeon/octeon.h
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,11 @@ struct octeon_cf_data {
int dma_engine; /* -1 for no DMA */
};

struct octeon_i2c_data {
unsigned int sys_freq;
unsigned int i2c_freq;
};

extern void octeon_write_lcd(const char *s);
extern void octeon_check_cpu_bist(void);
extern int octeon_get_boot_debug_flag(void);
Expand Down

0 comments on commit 4b48850

Please sign in to comment.