* [REPOST][PATCH 0/3] ARM: OMAP: Add command line option for I2C bus speed
@ 2009-02-08 17:32 Jarkko Nikula
2009-02-08 17:32 ` [PATCH] ARM: OMAP: Add documentation for function omap_register_i2c_bus Jarkko Nikula
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Jarkko Nikula @ 2009-02-08 17:32 UTC (permalink / raw)
To: linux-omap
Hi
I'm reposting this patch[set] adding command line option for I2C bus speed.
First version was
http://marc.info/?l=linux-omap&m=123289314421984&w=2
With this set, the option name is now i2c_bus instead of i2c_rate and this
version allow to register busses from command line as well. Idea of the set
is mostly for EVM boards where bus speed may depend on use case and extra
components connected into it.
With this it should be possible to revert one Dirk Behme's patch
commit bae4b6a716ccf3247a1991d3c20b5e58ddd52890
Author: Dirk Behme <dirk.behme@gmail.com>
Date: Tue Aug 5 14:09:15 2008 +0300
ARM: OMAP3: Make I2C bus 2 configurable for BeagleBoard
This is tested only with unmodified Beagle so I'm interested to hear if one
has e.g. a Beagle with extra I2C devices connected into second I2C bus and
those starts working just by adding "i2c_bus=2,100" on the kernel command line.
--
Jarkko
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH] ARM: OMAP: Add documentation for function omap_register_i2c_bus
2009-02-08 17:32 [REPOST][PATCH 0/3] ARM: OMAP: Add command line option for I2C bus speed Jarkko Nikula
@ 2009-02-08 17:32 ` Jarkko Nikula
2009-02-08 17:32 ` [PATCH] ARM: OMAP: Add command line option for I2C bus speed Jarkko Nikula
2009-02-09 7:58 ` [REPOST][PATCH 0/3] ARM: OMAP: Add command line option for I2C bus speed Jarkko Nikula
2009-02-09 7:59 ` [RFC 1/3] ARM: OMAP: Add documentation for function omap_register_i2c_bus Jarkko Nikula
2 siblings, 1 reply; 9+ messages in thread
From: Jarkko Nikula @ 2009-02-08 17:32 UTC (permalink / raw)
To: linux-omap; +Cc: Jarkko Nikula
From: Jarkko Nikula <jarkko.nikula@nokia.com>
Signed-off-by: Jarkko Nikula <jarkko.nikula@nokia.com>
---
arch/arm/plat-omap/i2c.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c
index 467531e..3e95954 100644
--- a/arch/arm/plat-omap/i2c.c
+++ b/arch/arm/plat-omap/i2c.c
@@ -119,6 +119,15 @@ static void __init omap_i2c_mux_pins(int bus)
omap_cfg_reg(scl);
}
+/**
+ * omap_register_i2c_bus - register I2C bus with device descriptors
+ * @bus_id: bus id counting from number 1
+ * @clkrate: clock rate of the bus in kHz
+ * @info: pointer into I2C device descriptor table or NULL
+ * @len: number of descriptors in the table
+ *
+ * Returns 0 on success or an error code.
+ */
int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
struct i2c_board_info const *info,
unsigned len)
--
1.5.6.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH] ARM: OMAP: Add command line option for I2C bus speed
2009-02-08 17:32 ` [PATCH] ARM: OMAP: Add documentation for function omap_register_i2c_bus Jarkko Nikula
@ 2009-02-08 17:32 ` Jarkko Nikula
2009-02-08 17:32 ` [PATCH] ARM: OMAP: Add method to register additional I2C busses on the command line Jarkko Nikula
0 siblings, 1 reply; 9+ messages in thread
From: Jarkko Nikula @ 2009-02-08 17:32 UTC (permalink / raw)
To: linux-omap; +Cc: Jarkko Nikula
From: Jarkko Nikula <jarkko.nikula@nokia.com>
This patch adds a new command line option "i2c_bus=bus_id,clkrate" into
I2C bus registration helper. Purpose of the option is to override the
default board specific bus speed which is supplied by the
omap_register_i2c_bus.
The default bus speed is typically set to speed of slowest I2C chip on the
bus and overriding allow to use some experimental configurations or updated
chip versions without any kernel modifications.
Signed-off-by: Jarkko Nikula <jarkko.nikula@nokia.com>
---
arch/arm/plat-omap/i2c.c | 54 +++++++++++++++++++++++++++++++++++++--------
1 files changed, 44 insertions(+), 10 deletions(-)
diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c
index 3e95954..aa70e43 100644
--- a/arch/arm/plat-omap/i2c.c
+++ b/arch/arm/plat-omap/i2c.c
@@ -119,6 +119,46 @@ static void __init omap_i2c_mux_pins(int bus)
omap_cfg_reg(scl);
}
+static int __init omap_i2c_nr_ports(void)
+{
+ int ports = 0;
+
+ if (cpu_class_is_omap1())
+ ports = 1;
+ else if (cpu_is_omap24xx())
+ ports = 2;
+ else if (cpu_is_omap34xx())
+ ports = 3;
+
+ return ports;
+}
+
+/**
+ * omap_i2c_bus_setup - Process command line options for the I2C bus speed
+ * @str: String of options
+ *
+ * This function allow to override the default I2C bus speed for given I2C
+ * bus with a command line option.
+ *
+ * Format: i2c_bus=bus_id,clkrate (in kHz)
+ *
+ * Returns 1 on success, 0 otherwise.
+ */
+static int __init omap_i2c_bus_setup(char *str)
+{
+ int ports;
+ int ints[3];
+
+ ports = omap_i2c_nr_ports();
+ get_options(str, 3, ints);
+ if (ints[0] < 2 || ints[1] < 1 || ints[1] > ports)
+ return 0;
+ i2c_rate[ints[1] - 1] = ints[2];
+
+ return 1;
+}
+__setup("i2c_bus=", omap_i2c_bus_setup);
+
/**
* omap_register_i2c_bus - register I2C bus with device descriptors
* @bus_id: bus id counting from number 1
@@ -132,19 +172,12 @@ int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
struct i2c_board_info const *info,
unsigned len)
{
- int ports, err;
+ int err;
struct platform_device *pdev;
struct resource *res;
resource_size_t base, irq;
- if (cpu_class_is_omap1())
- ports = 1;
- else if (cpu_is_omap24xx())
- ports = 2;
- else if (cpu_is_omap34xx())
- ports = 3;
-
- BUG_ON(bus_id < 1 || bus_id > ports);
+ BUG_ON(bus_id < 1 || bus_id > omap_i2c_nr_ports());
if (info) {
err = i2c_register_board_info(bus_id, info, len);
@@ -153,7 +186,8 @@ int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
}
pdev = &omap_i2c_devices[bus_id - 1];
- *(u32 *)pdev->dev.platform_data = clkrate;
+ if (i2c_rate[bus_id - 1] == 0)
+ i2c_rate[bus_id - 1] = clkrate;
if (bus_id == 1) {
res = pdev->resource;
--
1.5.6.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH] ARM: OMAP: Add method to register additional I2C busses on the command line
2009-02-08 17:32 ` [PATCH] ARM: OMAP: Add command line option for I2C bus speed Jarkko Nikula
@ 2009-02-08 17:32 ` Jarkko Nikula
0 siblings, 0 replies; 9+ messages in thread
From: Jarkko Nikula @ 2009-02-08 17:32 UTC (permalink / raw)
To: linux-omap; +Cc: Jarkko Nikula
From: Jarkko Nikula <jarkko.nikula@nokia.com>
This patch extends command line option "i2c_bus=bus_id,clkrate" so that
it allow to register additional I2C busses that are not registered with
omap_register_i2c_bus from board initialization code.
Purpose of this is to register additional board busses which are routed
to external connectors only without any on board I2C devices.
Signed-off-by: Jarkko Nikula <jarkko.nikula@nokia.com>
---
arch/arm/plat-omap/i2c.c | 73 ++++++++++++++++++++++++++++++++-------------
1 files changed, 52 insertions(+), 21 deletions(-)
diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c
index aa70e43..a303071 100644
--- a/arch/arm/plat-omap/i2c.c
+++ b/arch/arm/plat-omap/i2c.c
@@ -98,6 +98,8 @@ static const int omap34xx_pins[][2] = {
static const int omap34xx_pins[][2] = {};
#endif
+#define OMAP_I2C_CMDLINE_SETUP (BIT(31))
+
static void __init omap_i2c_mux_pins(int bus)
{
int scl, sda;
@@ -133,6 +135,31 @@ static int __init omap_i2c_nr_ports(void)
return ports;
}
+static int __init omap_i2c_add_bus(int bus_id)
+{
+ struct platform_device *pdev;
+ struct resource *res;
+ resource_size_t base, irq;
+
+ pdev = &omap_i2c_devices[bus_id - 1];
+ if (bus_id == 1) {
+ res = pdev->resource;
+ if (cpu_class_is_omap1()) {
+ base = OMAP1_I2C_BASE;
+ irq = INT_I2C;
+ } else {
+ base = OMAP2_I2C_BASE1;
+ irq = INT_24XX_I2C1_IRQ;
+ }
+ res[0].start = base;
+ res[0].end = base + OMAP_I2C_SIZE;
+ res[1].start = irq;
+ }
+
+ omap_i2c_mux_pins(bus_id - 1);
+ return platform_device_register(pdev);
+}
+
/**
* omap_i2c_bus_setup - Process command line options for the I2C bus speed
* @str: String of options
@@ -154,11 +181,33 @@ static int __init omap_i2c_bus_setup(char *str)
if (ints[0] < 2 || ints[1] < 1 || ints[1] > ports)
return 0;
i2c_rate[ints[1] - 1] = ints[2];
+ i2c_rate[ints[1] - 1] |= OMAP_I2C_CMDLINE_SETUP;
return 1;
}
__setup("i2c_bus=", omap_i2c_bus_setup);
+/*
+ * Register busses defined in command line but that are not registered with
+ * omap_register_i2c_bus from board initialization code.
+ */
+static int __init omap_register_i2c_bus_cmdline(void)
+{
+ int i, err = 0;
+
+ for (i = 0; i < ARRAY_SIZE(i2c_rate); i++)
+ if (i2c_rate[i] & OMAP_I2C_CMDLINE_SETUP) {
+ i2c_rate[i] &= ~OMAP_I2C_CMDLINE_SETUP;
+ err = omap_i2c_add_bus(i + 1);
+ if (err)
+ goto out;
+ }
+
+out:
+ return err;
+}
+subsys_initcall(omap_register_i2c_bus_cmdline);
+
/**
* omap_register_i2c_bus - register I2C bus with device descriptors
* @bus_id: bus id counting from number 1
@@ -173,9 +222,6 @@ int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
unsigned len)
{
int err;
- struct platform_device *pdev;
- struct resource *res;
- resource_size_t base, irq;
BUG_ON(bus_id < 1 || bus_id > omap_i2c_nr_ports());
@@ -185,24 +231,9 @@ int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
return err;
}
- pdev = &omap_i2c_devices[bus_id - 1];
- if (i2c_rate[bus_id - 1] == 0)
+ if (!i2c_rate[bus_id - 1])
i2c_rate[bus_id - 1] = clkrate;
+ i2c_rate[bus_id - 1] &= ~OMAP_I2C_CMDLINE_SETUP;
- if (bus_id == 1) {
- res = pdev->resource;
- if (cpu_class_is_omap1()) {
- base = OMAP1_I2C_BASE;
- irq = INT_I2C;
- } else {
- base = OMAP2_I2C_BASE1;
- irq = INT_24XX_I2C1_IRQ;
- }
- res[0].start = base;
- res[0].end = base + OMAP_I2C_SIZE;
- res[1].start = irq;
- }
-
- omap_i2c_mux_pins(bus_id - 1);
- return platform_device_register(pdev);
+ return omap_i2c_add_bus(bus_id);
}
--
1.5.6.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [REPOST][PATCH 0/3] ARM: OMAP: Add command line option for I2C bus speed
2009-02-08 17:32 [REPOST][PATCH 0/3] ARM: OMAP: Add command line option for I2C bus speed Jarkko Nikula
2009-02-08 17:32 ` [PATCH] ARM: OMAP: Add documentation for function omap_register_i2c_bus Jarkko Nikula
@ 2009-02-09 7:58 ` Jarkko Nikula
2009-02-09 7:59 ` [RFC 1/3] ARM: OMAP: Add documentation for function omap_register_i2c_bus Jarkko Nikula
2 siblings, 0 replies; 9+ messages in thread
From: Jarkko Nikula @ 2009-02-09 7:58 UTC (permalink / raw)
To: ext Jarkko Nikula; +Cc: linux-omap@vger.kernel.org
On Sun, 8 Feb 2009 18:32:46 +0100
ext Jarkko Nikula <jhnikula@gmail.com> wrote:
> Hi
>
> I'm reposting this patch[set] adding command line option for I2C bus
> speed. First version was
>
> http://marc.info/?l=linux-omap&m=123289314421984&w=2
>
Grr.. sorry for spamming but will repost again with patches numbered
and with RFC subject to make it easier to to deal with these. No
changes otherwise.
Jarkko
^ permalink raw reply [flat|nested] 9+ messages in thread
* [RFC 1/3] ARM: OMAP: Add documentation for function omap_register_i2c_bus
2009-02-08 17:32 [REPOST][PATCH 0/3] ARM: OMAP: Add command line option for I2C bus speed Jarkko Nikula
2009-02-08 17:32 ` [PATCH] ARM: OMAP: Add documentation for function omap_register_i2c_bus Jarkko Nikula
2009-02-09 7:58 ` [REPOST][PATCH 0/3] ARM: OMAP: Add command line option for I2C bus speed Jarkko Nikula
@ 2009-02-09 7:59 ` Jarkko Nikula
2009-02-09 7:59 ` [RFC 2/3] ARM: OMAP: Add command line option for I2C bus speed Jarkko Nikula
2 siblings, 1 reply; 9+ messages in thread
From: Jarkko Nikula @ 2009-02-09 7:59 UTC (permalink / raw)
To: linux-omap; +Cc: Jarkko Nikula
Signed-off-by: Jarkko Nikula <jarkko.nikula@nokia.com>
---
arch/arm/plat-omap/i2c.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c
index 467531e..3e95954 100644
--- a/arch/arm/plat-omap/i2c.c
+++ b/arch/arm/plat-omap/i2c.c
@@ -119,6 +119,15 @@ static void __init omap_i2c_mux_pins(int bus)
omap_cfg_reg(scl);
}
+/**
+ * omap_register_i2c_bus - register I2C bus with device descriptors
+ * @bus_id: bus id counting from number 1
+ * @clkrate: clock rate of the bus in kHz
+ * @info: pointer into I2C device descriptor table or NULL
+ * @len: number of descriptors in the table
+ *
+ * Returns 0 on success or an error code.
+ */
int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
struct i2c_board_info const *info,
unsigned len)
--
1.5.6.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [RFC 2/3] ARM: OMAP: Add command line option for I2C bus speed
2009-02-09 7:59 ` [RFC 1/3] ARM: OMAP: Add documentation for function omap_register_i2c_bus Jarkko Nikula
@ 2009-02-09 7:59 ` Jarkko Nikula
2009-02-09 7:59 ` [RFC 3/3] ARM: OMAP: Add method to register additional I2C busses on the command line Jarkko Nikula
0 siblings, 1 reply; 9+ messages in thread
From: Jarkko Nikula @ 2009-02-09 7:59 UTC (permalink / raw)
To: linux-omap; +Cc: Jarkko Nikula
This patch adds a new command line option "i2c_bus=bus_id,clkrate" into
I2C bus registration helper. Purpose of the option is to override the
default board specific bus speed which is supplied by the
omap_register_i2c_bus.
The default bus speed is typically set to speed of slowest I2C chip on the
bus and overriding allow to use some experimental configurations or updated
chip versions without any kernel modifications.
Signed-off-by: Jarkko Nikula <jarkko.nikula@nokia.com>
---
arch/arm/plat-omap/i2c.c | 54 +++++++++++++++++++++++++++++++++++++--------
1 files changed, 44 insertions(+), 10 deletions(-)
diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c
index 3e95954..aa70e43 100644
--- a/arch/arm/plat-omap/i2c.c
+++ b/arch/arm/plat-omap/i2c.c
@@ -119,6 +119,46 @@ static void __init omap_i2c_mux_pins(int bus)
omap_cfg_reg(scl);
}
+static int __init omap_i2c_nr_ports(void)
+{
+ int ports = 0;
+
+ if (cpu_class_is_omap1())
+ ports = 1;
+ else if (cpu_is_omap24xx())
+ ports = 2;
+ else if (cpu_is_omap34xx())
+ ports = 3;
+
+ return ports;
+}
+
+/**
+ * omap_i2c_bus_setup - Process command line options for the I2C bus speed
+ * @str: String of options
+ *
+ * This function allow to override the default I2C bus speed for given I2C
+ * bus with a command line option.
+ *
+ * Format: i2c_bus=bus_id,clkrate (in kHz)
+ *
+ * Returns 1 on success, 0 otherwise.
+ */
+static int __init omap_i2c_bus_setup(char *str)
+{
+ int ports;
+ int ints[3];
+
+ ports = omap_i2c_nr_ports();
+ get_options(str, 3, ints);
+ if (ints[0] < 2 || ints[1] < 1 || ints[1] > ports)
+ return 0;
+ i2c_rate[ints[1] - 1] = ints[2];
+
+ return 1;
+}
+__setup("i2c_bus=", omap_i2c_bus_setup);
+
/**
* omap_register_i2c_bus - register I2C bus with device descriptors
* @bus_id: bus id counting from number 1
@@ -132,19 +172,12 @@ int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
struct i2c_board_info const *info,
unsigned len)
{
- int ports, err;
+ int err;
struct platform_device *pdev;
struct resource *res;
resource_size_t base, irq;
- if (cpu_class_is_omap1())
- ports = 1;
- else if (cpu_is_omap24xx())
- ports = 2;
- else if (cpu_is_omap34xx())
- ports = 3;
-
- BUG_ON(bus_id < 1 || bus_id > ports);
+ BUG_ON(bus_id < 1 || bus_id > omap_i2c_nr_ports());
if (info) {
err = i2c_register_board_info(bus_id, info, len);
@@ -153,7 +186,8 @@ int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
}
pdev = &omap_i2c_devices[bus_id - 1];
- *(u32 *)pdev->dev.platform_data = clkrate;
+ if (i2c_rate[bus_id - 1] == 0)
+ i2c_rate[bus_id - 1] = clkrate;
if (bus_id == 1) {
res = pdev->resource;
--
1.5.6.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [RFC 3/3] ARM: OMAP: Add method to register additional I2C busses on the command line
2009-02-09 7:59 ` [RFC 2/3] ARM: OMAP: Add command line option for I2C bus speed Jarkko Nikula
@ 2009-02-09 7:59 ` Jarkko Nikula
2009-02-20 19:01 ` Tony Lindgren
0 siblings, 1 reply; 9+ messages in thread
From: Jarkko Nikula @ 2009-02-09 7:59 UTC (permalink / raw)
To: linux-omap; +Cc: Jarkko Nikula
This patch extends command line option "i2c_bus=bus_id,clkrate" so that
it allow to register additional I2C busses that are not registered with
omap_register_i2c_bus from board initialization code.
Purpose of this is to register additional board busses which are routed
to external connectors only without any on board I2C devices.
Signed-off-by: Jarkko Nikula <jarkko.nikula@nokia.com>
---
arch/arm/plat-omap/i2c.c | 73 ++++++++++++++++++++++++++++++++-------------
1 files changed, 52 insertions(+), 21 deletions(-)
diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c
index aa70e43..a303071 100644
--- a/arch/arm/plat-omap/i2c.c
+++ b/arch/arm/plat-omap/i2c.c
@@ -98,6 +98,8 @@ static const int omap34xx_pins[][2] = {
static const int omap34xx_pins[][2] = {};
#endif
+#define OMAP_I2C_CMDLINE_SETUP (BIT(31))
+
static void __init omap_i2c_mux_pins(int bus)
{
int scl, sda;
@@ -133,6 +135,31 @@ static int __init omap_i2c_nr_ports(void)
return ports;
}
+static int __init omap_i2c_add_bus(int bus_id)
+{
+ struct platform_device *pdev;
+ struct resource *res;
+ resource_size_t base, irq;
+
+ pdev = &omap_i2c_devices[bus_id - 1];
+ if (bus_id == 1) {
+ res = pdev->resource;
+ if (cpu_class_is_omap1()) {
+ base = OMAP1_I2C_BASE;
+ irq = INT_I2C;
+ } else {
+ base = OMAP2_I2C_BASE1;
+ irq = INT_24XX_I2C1_IRQ;
+ }
+ res[0].start = base;
+ res[0].end = base + OMAP_I2C_SIZE;
+ res[1].start = irq;
+ }
+
+ omap_i2c_mux_pins(bus_id - 1);
+ return platform_device_register(pdev);
+}
+
/**
* omap_i2c_bus_setup - Process command line options for the I2C bus speed
* @str: String of options
@@ -154,11 +181,33 @@ static int __init omap_i2c_bus_setup(char *str)
if (ints[0] < 2 || ints[1] < 1 || ints[1] > ports)
return 0;
i2c_rate[ints[1] - 1] = ints[2];
+ i2c_rate[ints[1] - 1] |= OMAP_I2C_CMDLINE_SETUP;
return 1;
}
__setup("i2c_bus=", omap_i2c_bus_setup);
+/*
+ * Register busses defined in command line but that are not registered with
+ * omap_register_i2c_bus from board initialization code.
+ */
+static int __init omap_register_i2c_bus_cmdline(void)
+{
+ int i, err = 0;
+
+ for (i = 0; i < ARRAY_SIZE(i2c_rate); i++)
+ if (i2c_rate[i] & OMAP_I2C_CMDLINE_SETUP) {
+ i2c_rate[i] &= ~OMAP_I2C_CMDLINE_SETUP;
+ err = omap_i2c_add_bus(i + 1);
+ if (err)
+ goto out;
+ }
+
+out:
+ return err;
+}
+subsys_initcall(omap_register_i2c_bus_cmdline);
+
/**
* omap_register_i2c_bus - register I2C bus with device descriptors
* @bus_id: bus id counting from number 1
@@ -173,9 +222,6 @@ int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
unsigned len)
{
int err;
- struct platform_device *pdev;
- struct resource *res;
- resource_size_t base, irq;
BUG_ON(bus_id < 1 || bus_id > omap_i2c_nr_ports());
@@ -185,24 +231,9 @@ int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
return err;
}
- pdev = &omap_i2c_devices[bus_id - 1];
- if (i2c_rate[bus_id - 1] == 0)
+ if (!i2c_rate[bus_id - 1])
i2c_rate[bus_id - 1] = clkrate;
+ i2c_rate[bus_id - 1] &= ~OMAP_I2C_CMDLINE_SETUP;
- if (bus_id == 1) {
- res = pdev->resource;
- if (cpu_class_is_omap1()) {
- base = OMAP1_I2C_BASE;
- irq = INT_I2C;
- } else {
- base = OMAP2_I2C_BASE1;
- irq = INT_24XX_I2C1_IRQ;
- }
- res[0].start = base;
- res[0].end = base + OMAP_I2C_SIZE;
- res[1].start = irq;
- }
-
- omap_i2c_mux_pins(bus_id - 1);
- return platform_device_register(pdev);
+ return omap_i2c_add_bus(bus_id);
}
--
1.5.6.5
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [RFC 3/3] ARM: OMAP: Add method to register additional I2C busses on the command line
2009-02-09 7:59 ` [RFC 3/3] ARM: OMAP: Add method to register additional I2C busses on the command line Jarkko Nikula
@ 2009-02-20 19:01 ` Tony Lindgren
0 siblings, 0 replies; 9+ messages in thread
From: Tony Lindgren @ 2009-02-20 19:01 UTC (permalink / raw)
To: Jarkko Nikula; +Cc: linux-omap
* Jarkko Nikula <jarkko.nikula@nokia.com> [090209 00:00]:
> This patch extends command line option "i2c_bus=bus_id,clkrate" so that
> it allow to register additional I2C busses that are not registered with
> omap_register_i2c_bus from board initialization code.
>
> Purpose of this is to register additional board busses which are routed
> to external connectors only without any on board I2C devices.
Adding all three to omap-upstream and pushing to linux-omap.
Tony
> Signed-off-by: Jarkko Nikula <jarkko.nikula@nokia.com>
> ---
> arch/arm/plat-omap/i2c.c | 73 ++++++++++++++++++++++++++++++++-------------
> 1 files changed, 52 insertions(+), 21 deletions(-)
>
> diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c
> index aa70e43..a303071 100644
> --- a/arch/arm/plat-omap/i2c.c
> +++ b/arch/arm/plat-omap/i2c.c
> @@ -98,6 +98,8 @@ static const int omap34xx_pins[][2] = {
> static const int omap34xx_pins[][2] = {};
> #endif
>
> +#define OMAP_I2C_CMDLINE_SETUP (BIT(31))
> +
> static void __init omap_i2c_mux_pins(int bus)
> {
> int scl, sda;
> @@ -133,6 +135,31 @@ static int __init omap_i2c_nr_ports(void)
> return ports;
> }
>
> +static int __init omap_i2c_add_bus(int bus_id)
> +{
> + struct platform_device *pdev;
> + struct resource *res;
> + resource_size_t base, irq;
> +
> + pdev = &omap_i2c_devices[bus_id - 1];
> + if (bus_id == 1) {
> + res = pdev->resource;
> + if (cpu_class_is_omap1()) {
> + base = OMAP1_I2C_BASE;
> + irq = INT_I2C;
> + } else {
> + base = OMAP2_I2C_BASE1;
> + irq = INT_24XX_I2C1_IRQ;
> + }
> + res[0].start = base;
> + res[0].end = base + OMAP_I2C_SIZE;
> + res[1].start = irq;
> + }
> +
> + omap_i2c_mux_pins(bus_id - 1);
> + return platform_device_register(pdev);
> +}
> +
> /**
> * omap_i2c_bus_setup - Process command line options for the I2C bus speed
> * @str: String of options
> @@ -154,11 +181,33 @@ static int __init omap_i2c_bus_setup(char *str)
> if (ints[0] < 2 || ints[1] < 1 || ints[1] > ports)
> return 0;
> i2c_rate[ints[1] - 1] = ints[2];
> + i2c_rate[ints[1] - 1] |= OMAP_I2C_CMDLINE_SETUP;
>
> return 1;
> }
> __setup("i2c_bus=", omap_i2c_bus_setup);
>
> +/*
> + * Register busses defined in command line but that are not registered with
> + * omap_register_i2c_bus from board initialization code.
> + */
> +static int __init omap_register_i2c_bus_cmdline(void)
> +{
> + int i, err = 0;
> +
> + for (i = 0; i < ARRAY_SIZE(i2c_rate); i++)
> + if (i2c_rate[i] & OMAP_I2C_CMDLINE_SETUP) {
> + i2c_rate[i] &= ~OMAP_I2C_CMDLINE_SETUP;
> + err = omap_i2c_add_bus(i + 1);
> + if (err)
> + goto out;
> + }
> +
> +out:
> + return err;
> +}
> +subsys_initcall(omap_register_i2c_bus_cmdline);
> +
> /**
> * omap_register_i2c_bus - register I2C bus with device descriptors
> * @bus_id: bus id counting from number 1
> @@ -173,9 +222,6 @@ int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
> unsigned len)
> {
> int err;
> - struct platform_device *pdev;
> - struct resource *res;
> - resource_size_t base, irq;
>
> BUG_ON(bus_id < 1 || bus_id > omap_i2c_nr_ports());
>
> @@ -185,24 +231,9 @@ int __init omap_register_i2c_bus(int bus_id, u32 clkrate,
> return err;
> }
>
> - pdev = &omap_i2c_devices[bus_id - 1];
> - if (i2c_rate[bus_id - 1] == 0)
> + if (!i2c_rate[bus_id - 1])
> i2c_rate[bus_id - 1] = clkrate;
> + i2c_rate[bus_id - 1] &= ~OMAP_I2C_CMDLINE_SETUP;
>
> - if (bus_id == 1) {
> - res = pdev->resource;
> - if (cpu_class_is_omap1()) {
> - base = OMAP1_I2C_BASE;
> - irq = INT_I2C;
> - } else {
> - base = OMAP2_I2C_BASE1;
> - irq = INT_24XX_I2C1_IRQ;
> - }
> - res[0].start = base;
> - res[0].end = base + OMAP_I2C_SIZE;
> - res[1].start = irq;
> - }
> -
> - omap_i2c_mux_pins(bus_id - 1);
> - return platform_device_register(pdev);
> + return omap_i2c_add_bus(bus_id);
> }
> --
> 1.5.6.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2009-02-20 19:01 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-08 17:32 [REPOST][PATCH 0/3] ARM: OMAP: Add command line option for I2C bus speed Jarkko Nikula
2009-02-08 17:32 ` [PATCH] ARM: OMAP: Add documentation for function omap_register_i2c_bus Jarkko Nikula
2009-02-08 17:32 ` [PATCH] ARM: OMAP: Add command line option for I2C bus speed Jarkko Nikula
2009-02-08 17:32 ` [PATCH] ARM: OMAP: Add method to register additional I2C busses on the command line Jarkko Nikula
2009-02-09 7:58 ` [REPOST][PATCH 0/3] ARM: OMAP: Add command line option for I2C bus speed Jarkko Nikula
2009-02-09 7:59 ` [RFC 1/3] ARM: OMAP: Add documentation for function omap_register_i2c_bus Jarkko Nikula
2009-02-09 7:59 ` [RFC 2/3] ARM: OMAP: Add command line option for I2C bus speed Jarkko Nikula
2009-02-09 7:59 ` [RFC 3/3] ARM: OMAP: Add method to register additional I2C busses on the command line Jarkko Nikula
2009-02-20 19:01 ` Tony Lindgren
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox