From: Andy Green <andy@warmcat.com>
To: linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org
Cc: patches@linaro.org, Ben Dooks <ben-linux@fluff.org>,
Andy Green <andy.green@linaro.org>
Subject: [PATCH 3 17/18] I2C: OMAP2+: Convert omap I2C driver to use feature implementation flags from platform data
Date: Tue, 15 Mar 2011 19:57:57 +0000 [thread overview]
Message-ID: <20110315195757.30000.59422.stgit@otae.warmcat.com> (raw)
In-Reply-To: <20110315195147.30000.86184.stgit@otae.warmcat.com>
This patch eliminates all cpu_...() tests from the OMAP I2C driver.
Instead, it uses the functionality flags in the platform data to make
the decisions about product variations the driver needs to handle.
Cc: patches@linaro.org
Cc: Ben Dooks <ben-linux@fluff.org>
Reported-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Andy Green <andy.green@linaro.org>
---
drivers/i2c/busses/i2c-omap.c | 40 +++++++++++++++++++++++-----------------
1 files changed, 23 insertions(+), 17 deletions(-)
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
index ecb48c7..c997c55 100644
--- a/drivers/i2c/busses/i2c-omap.c
+++ b/drivers/i2c/busses/i2c-omap.c
@@ -277,7 +277,7 @@ static void omap_i2c_unidle(struct omap_i2c_dev *dev)
pm_runtime_get_sync(&pdev->dev);
- if (cpu_is_omap34xx()) {
+ if (pdata->flags & OMAP_I2C_FLAG_RESET_REGS_POSTIDLE) {
omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
omap_i2c_write_reg(dev, OMAP_I2C_PSC_REG, dev->pscstate);
omap_i2c_write_reg(dev, OMAP_I2C_SCLL_REG, dev->scllstate);
@@ -335,6 +335,11 @@ static int omap_i2c_init(struct omap_i2c_dev *dev)
unsigned long timeout;
unsigned long internal_clk = 0;
struct clk *fclk;
+ struct platform_device *pdev;
+ struct omap_i2c_bus_platform_data *pdata;
+
+ pdev = to_platform_device(dev->dev);
+ pdata = pdev->dev.platform_data;
if (dev->rev >= OMAP_I2C_OMAP1_REV_2) {
/* Disable I2C controller before soft reset */
@@ -386,7 +391,7 @@ static int omap_i2c_init(struct omap_i2c_dev *dev)
}
omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
- if (cpu_class_is_omap1()) {
+ if (pdata->flags & OMAP_I2C_FLAG_ALWAYS_ARMXOR_CLK) {
/*
* The I2C functional clock is the armxor_ck, so there's
* no need to get "armxor_ck" separately. Now, if OMAP2420
@@ -410,7 +415,7 @@ static int omap_i2c_init(struct omap_i2c_dev *dev)
psc = fclk_rate / 12000000;
}
- if (!(cpu_class_is_omap1() || cpu_is_omap2420())) {
+ if (!(pdata->flags & OMAP_I2C_FLAG_SIMPLE_CLOCK)) {
/*
* HSI2C controller internal clk rate should be 19.2 Mhz for
@@ -418,7 +423,8 @@ static int omap_i2c_init(struct omap_i2c_dev *dev)
* to get longer filter period for better noise suppression.
* The filter is iclk (fclk for HS) period.
*/
- if (dev->speed > 400 || cpu_is_omap2430())
+ if (dev->speed > 400 ||
+ pdata->flags & OMAP_I2C_FLAG_FORCE_19200_INT_CLK)
internal_clk = 19200;
else if (dev->speed > 100)
internal_clk = 9600;
@@ -487,7 +493,7 @@ static int omap_i2c_init(struct omap_i2c_dev *dev)
dev->errata = 0;
- if (cpu_is_omap2430() || cpu_is_omap34xx())
+ if (pdata->flags & OMAP_I2C_FLAG_APPLY_ERRATA_I207)
dev->errata |= I2C_OMAP_ERRATA_I207;
/* Enable interrupts */
@@ -496,7 +502,7 @@ static int omap_i2c_init(struct omap_i2c_dev *dev)
OMAP_I2C_IE_AL) | ((dev->fifo_size) ?
(OMAP_I2C_IE_RDR | OMAP_I2C_IE_XDR) : 0);
omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, dev->iestate);
- if (cpu_is_omap34xx()) {
+ if (pdata->flags & OMAP_I2C_FLAG_RESET_REGS_POSTIDLE) {
dev->pscstate = psc;
dev->scllstate = scll;
dev->sclhstate = sclh;
@@ -816,6 +822,11 @@ omap_i2c_isr(int this_irq, void *dev_id)
u16 bits;
u16 stat, w;
int err, count = 0;
+ struct platform_device *pdev;
+ struct omap_i2c_bus_platform_data *pdata;
+
+ pdev = to_platform_device(dev->dev);
+ pdata = pdev->dev.platform_data;
if (dev->idle)
return IRQ_NONE;
@@ -884,8 +895,8 @@ complete:
* Data reg in 2430, omap3 and
* omap4 is 8 bit wide
*/
- if (cpu_class_is_omap1() ||
- cpu_is_omap2420()) {
+ if (pdata->flags &
+ OMAP_I2C_FLAG_16BIT_DATA_REG) {
if (dev->buf_len) {
*dev->buf++ = w >> 8;
dev->buf_len--;
@@ -927,8 +938,8 @@ complete:
* Data reg in 2430, omap3 and
* omap4 is 8 bit wide
*/
- if (cpu_class_is_omap1() ||
- cpu_is_omap2420()) {
+ if (pdata->flags &
+ OMAP_I2C_FLAG_16BIT_DATA_REG) {
if (dev->buf_len) {
w |= *dev->buf++ << 8;
dev->buf_len--;
@@ -1030,12 +1041,7 @@ omap_i2c_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, dev);
- if (cpu_is_omap7xx())
- dev->reg_shift = 1;
- else if (cpu_is_omap44xx())
- dev->reg_shift = 0;
- else
- dev->reg_shift = 2;
+ dev->reg_shift = (pdata->flags >> OMAP_I2C_FLAG_BUS_SHIFT__SHIFT) & 3;
if (pdata->rev == OMAP_I2C_IP_VERSION_2)
dev->regs = (u8 *)reg_map_ip_v2;
@@ -1050,7 +1056,7 @@ omap_i2c_probe(struct platform_device *pdev)
if (dev->rev <= OMAP_I2C_REV_ON_3430)
dev->errata |= I2C_OMAP3_1P153;
- if (!(cpu_class_is_omap1() || cpu_is_omap2420())) {
+ if (!(pdata->flags & OMAP_I2C_FLAG_NO_FIFO)) {
u16 s;
/* Set up the fifo size - Get total size */
next prev parent reply other threads:[~2011-03-15 19:58 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-15 19:55 [PATCH 3 00/18] I2C: OMAP1: OMAP2+: I2C fixes, removal of cpu_is... from driver Andy Green
2011-03-15 19:55 ` [PATCH 3 01/18] OMAP2+: hwmod data: Set hwmod flags to only allow 16-bit accesses to i2c Andy Green
2011-03-15 19:56 ` [PATCH 3 02/18] I2C: OMAP2+: Name registers in I2C IP V2 only accordingly Andy Green
2011-03-15 19:56 ` [PATCH 3 03/18] I2C: OMAP2+: Introduce I2C IP versioning constants Andy Green
2011-03-15 19:56 ` [PATCH 3 04/18] I2C: OMAP2+: hwmod data: Tag all OMAP2+ hwmod definitions with I2C IP revision Andy Green
2011-03-15 19:56 ` [PATCH 3 05/18] I2C: OMAP: add rev to omap i2c platform data Andy Green
2011-03-15 19:56 ` [PATCH 3 06/18] I2C: OMAP1: set IP revision in " Andy Green
2011-03-15 19:56 ` [PATCH 3 07/18] I2C: OMAP2+: Pass hwmod rev knowledge via platform_data when i2c bus added Andy Green
2011-03-15 19:56 ` [PATCH 3 08/18] I2C: OMAP2+: use platform_data ip revision to select register map Andy Green
2011-03-15 19:56 ` [PATCH 3 09/18] I2C: OMAP2+: Solve array bounds overflow error on i2c idle Andy Green
2011-03-15 19:57 ` [PATCH 3 10/18] I2C: OMAP2+: address confused probed version naming Andy Green
2011-03-15 19:57 ` [PATCH 3 11/18] I2C: OMAP2+: increase omap_i2c_dev_attr flags from u8 to u32 Andy Green
2011-03-15 19:57 ` [PATCH 3 12/18] I2C: OMAP1/OMAP2+: add flags field to omap i2c platform data Andy Green
2011-03-15 19:57 ` [PATCH 3 13/18] I2C: OMAP2+: Pass flags up to omap i2c platform_data as well Andy Green
2011-03-15 19:57 ` [PATCH 3 14/18] I2C: OMAP1/OMAP2+: create omap I2C functionality flags for each cpu_... test Andy Green
2011-03-15 19:57 ` [PATCH 3 15/18] OMAP2+: hwmod data: add correct functionality flags to all omap2plus i2c dev_attr Andy Green
2011-03-15 19:57 ` [PATCH 3 16/18] I2C: OMAP1: set i2c unit feature implementation flags in platform data Andy Green
2011-03-15 19:57 ` Andy Green [this message]
2011-03-15 19:58 ` [PATCH 3 18/18] I2C: OMAP1/OMAP2+: prepend I2C IP version to probed version shown in dev_info Andy Green
2011-03-15 22:28 ` [PATCH 3 00/18] I2C: OMAP1: OMAP2+: I2C fixes, removal of cpu_is... from driver Tony Lindgren
2011-03-16 7:22 ` Andy Green
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110315195757.30000.59422.stgit@otae.warmcat.com \
--to=andy@warmcat.com \
--cc=andy.green@linaro.org \
--cc=ben-linux@fluff.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=patches@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).