Skip to content

Commit

Permalink
[I2C] Split mv643xx I2C platform support
Browse files Browse the repository at this point in the history
The motivation for this change is to allow other chips, like the
Marvell Orion ARM SoC family, to use the existing i2c-mv64xxx driver.

Signed-off-by: Tzachi Perelstein <tzachi@marvell.com>
Acked-by: Nicolas Pitre <nico@marvell.com>
Acked-by: Dale Farnsworth <dale@farnsworth.org>
Acked-by: Mark A. Greer <mgreer@mvista.com>
Acked-by: Jean Delvare <khali@linux-fr.org>
  • Loading branch information
Tzachi Perelstein authored and Russell King committed Jan 26, 2008
1 parent 60ce1c2 commit a083279
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 24 deletions.
2 changes: 1 addition & 1 deletion drivers/i2c/busses/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -648,7 +648,7 @@ config I2C_PCA_ISA

config I2C_MV64XXX
tristate "Marvell mv64xxx I2C Controller"
depends on MV64X60 && EXPERIMENTAL
depends on (MV64X60 || ARCH_ORION) && EXPERIMENTAL
help
If you say yes to this option, support will be included for the
built-in I2C interface on the Marvell 64xxx line of host bridges.
Expand Down
31 changes: 17 additions & 14 deletions drivers/i2c/busses/i2c-mv64xxx.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Driver for the i2c controller on the Marvell line of host bridges for MIPS
* and PPC (e.g, gt642[46]0, mv643[46]0, mv644[46]0).
* Driver for the i2c controller on the Marvell line of host bridges
* (e.g, gt642[46]0, mv643[46]0, mv644[46]0, and Orion SoC family).
*
* Author: Mark A. Greer <mgreer@mvista.com>
*
Expand All @@ -14,7 +14,7 @@
#include <linux/spinlock.h>
#include <linux/i2c.h>
#include <linux/interrupt.h>
#include <linux/mv643xx.h>
#include <linux/mv643xx_i2c.h>
#include <linux/platform_device.h>

#include <asm/io.h>
Expand Down Expand Up @@ -86,6 +86,7 @@ struct mv64xxx_i2c_data {
u32 cntl_bits;
void __iomem *reg_base;
u32 reg_base_p;
u32 reg_size;
u32 addr1;
u32 addr2;
u32 bytes_left;
Expand Down Expand Up @@ -463,17 +464,20 @@ static int __devinit
mv64xxx_i2c_map_regs(struct platform_device *pd,
struct mv64xxx_i2c_data *drv_data)
{
struct resource *r;
int size;
struct resource *r = platform_get_resource(pd, IORESOURCE_MEM, 0);

if ((r = platform_get_resource(pd, IORESOURCE_MEM, 0)) &&
request_mem_region(r->start, MV64XXX_I2C_REG_BLOCK_SIZE,
drv_data->adapter.name)) {
if (!r)
return -ENODEV;

drv_data->reg_base = ioremap(r->start,
MV64XXX_I2C_REG_BLOCK_SIZE);
drv_data->reg_base_p = r->start;
} else
return -ENOMEM;
size = r->end - r->start + 1;

if (!request_mem_region(r->start, size, drv_data->adapter.name))
return -EBUSY;

drv_data->reg_base = ioremap(r->start, size);
drv_data->reg_base_p = r->start;
drv_data->reg_size = size;

return 0;
}
Expand All @@ -483,8 +487,7 @@ mv64xxx_i2c_unmap_regs(struct mv64xxx_i2c_data *drv_data)
{
if (drv_data->reg_base) {
iounmap(drv_data->reg_base);
release_mem_region(drv_data->reg_base_p,
MV64XXX_I2C_REG_BLOCK_SIZE);
release_mem_region(drv_data->reg_base_p, drv_data->reg_size);
}

drv_data->reg_base = NULL;
Expand Down
10 changes: 1 addition & 9 deletions include/linux/mv643xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

#include <asm/types.h>
#include <linux/mv643xx_eth.h>
#include <linux/mv643xx_i2c.h>

/****************************************/
/* Processor Address Space */
Expand Down Expand Up @@ -863,7 +864,6 @@
/* I2C Registers */
/****************************************/

#define MV64XXX_I2C_CTLR_NAME "mv64xxx_i2c"
#define MV64XXX_I2C_OFFSET 0xc000
#define MV64XXX_I2C_REG_BLOCK_SIZE 0x0020

Expand Down Expand Up @@ -968,14 +968,6 @@ struct mpsc_pdata {
u32 brg_clk_freq;
};

/* i2c Platform Device, Driver Data */
struct mv64xxx_i2c_pdata {
u32 freq_m;
u32 freq_n;
u32 timeout; /* In milliseconds */
u32 retries;
};

/* Watchdog Platform Device, Driver Data */
#define MV64x60_WDT_NAME "mv64x60_wdt"

Expand Down
23 changes: 23 additions & 0 deletions include/linux/mv643xx_i2c.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*/

#ifndef _MV64XXX_I2C_H_
#define _MV64XXX_I2C_H_

#include <linux/types.h>

#define MV64XXX_I2C_CTLR_NAME "mv64xxx_i2c"

/* i2c Platform Device, Driver Data */
struct mv64xxx_i2c_pdata {
u32 freq_m;
u32 freq_n;
u32 timeout; /* In milliseconds */
u32 retries;
};

#endif /*_MV64XXX_I2C_H_*/

0 comments on commit a083279

Please sign in to comment.