linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Grant Likely <grant.likely@secretlab.ca>
To: Wolfgang Grandegger <wg@grandegger.com>
Cc: linuxppc-dev@ozlabs.org, devicetree-discuss@ozlabs.org
Subject: Re: [PATCH 5/8] powerpc: i2c-mpc: make I2C bus speed configurable
Date: Tue, 31 Mar 2009 09:41:48 -0600	[thread overview]
Message-ID: <fa686aa40903310841x42876819rafe3e8bf24b8646e@mail.gmail.com> (raw)
In-Reply-To: <20090331124035.908249543@denx.de>

On Tue, Mar 31, 2009 at 6:37 AM, Wolfgang Grandegger <wg@grandegger.com> wr=
ote:
> This patch makes the I2C bus speed configurable by using the I2C node
> property "clock-frequency". If the property is not defined, the old
> fixed clock settings will be used for backward comptibility.
>
> The generic I2C clock properties, especially the CPU-specific source
> clock pre-scaler are defined via the OF match table:
>
> =A0static const struct of_device_id mpc_i2c_of_match[] =3D {
> =A0 =A0 =A0 =A0{.compatible =3D "fsl,mpc5200b-i2c",
> =A0 =A0 =A0 =A0 .data =3D (void *)FSL_I2C_DEV_CLOCK_5200, },
> =A0 =A0 =A0 =A0{.compatible =3D "fsl,mpc5200-i2c",
> =A0 =A0 =A0 =A0 .data =3D (void *)FSL_I2C_DEV_CLOCK_5200, },
> =A0 =A0 =A0 =A0{.compatible =3D "fsl,mpc8313-i2c",
> =A0 =A0 =A0 =A0 .data =3D (void *)FSL_I2C_DEV_SEPARATE_DFSRR, },
> =A0 =A0 =A0 =A0{.compatible =3D "fsl,mpc8543-i2c",
> =A0 =A0 =A0 =A0 .data =3D (void *)(FSL_I2C_DEV_SEPARATE_DFSRR |
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0FSL_I2C_DEV_CLOCK_DIV2=
), },
> =A0 =A0 =A0 =A0{.compatible =3D "fsl,mpc8544-i2c",
> =A0 =A0 =A0 =A0 .data =3D (void *)(FSL_I2C_DEV_SEPARATE_DFSRR |
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0FSL_I2C_DEV_CLOCK_DIV2=
3), },
> =A0 =A0 =A0 =A0/* Backward compatibility */
> =A0 =A0 =A0 =A0{.compatible =3D "fsl-i2c", },
> =A0 =A0 =A0 =A0{},
> =A0};


Instead passing in a flag (and using an ugly cast to do it) which is
then checked inside the mpc_i2c_setclock(), you should do this
instead:

struct fsl_i2c_match_data {
        int static void *(setclock)(struct device_node *node, struct
mpc_i2c *i2c, u32 clock);
        int flags;
        /* Other stuff can go here */
};

static const struct of_device_id mpc_i2c_of_match[] =3D {
        {.compatible =3D "fsl,mpc5200b-i2c",
         .data =3D (struct fsl_i2c_match_data[]) { .setclock =3D
mpc_i2c_setclock_mpc5200, },
        },
        {.compatible =3D "fsl,mpc5200-i2c",
         .data =3D (struct fsl_i2c_match_data[]) { .setclock =3D
mpc_i2c_setclock_mpc5200, },
        },
        {.compatible =3D "fsl,mpc8313-i2c",
         .data =3D (struct fsl_i2c_match_data[]) { .setclock =3D
mpc_i2c_setclock_separate_dfsrr, },
        },
        {.compatible =3D "fsl,mpc8543-i2c",
         .data =3D (struct fsl_i2c_match_data[]) { .setclock =3D
mpc_i2c_setclock_separate_dfsrr, },
         .flags =3D FSL_I2C_DEV_CLOCK_DIV2,
        },
        {.compatible =3D "fsl,mpc8544-i2c",
         .data =3D (struct fsl_i2c_match_data[]) { .setclock =3D
mpc_i2c_setclock_separate_dfsrr, },
         .flags =3D FSL_I2C_DEV_CLOCK_DIV23,
        },
        /* Backward compatibility */
        {.compatible =3D "fsl-i2c",
         .data =3D (struct fsl_i2c_match_data[]) { .setclock =3D
mpc_i2c_setclock, },
        },
        {},
  };

The table definition is more verbose this way, but I think it results
in more understandable and easier to extend code.  It also adds lets
the compiler do more type checking for you.


Also, this ...

> --- linux-2.6.orig/arch/powerpc/sysdev/fsl_soc.c =A0 =A0 =A0 =A02009-03-3=
1 13:25:08.000000000 +0200
> +++ linux-2.6/arch/powerpc/sysdev/fsl_soc.c =A0 =A0 2009-03-31 13:34:40.5=
31721011 +0200
> +int fsl_i2c_get_fdr(struct device_node *node, u32 i2c_clock, u32 i2c_fla=
gs)
> +{
> [...]
> +}
> +EXPORT_SYMBOL(fsl_i2c_get_fdr);

... and this ...

> --- linux-2.6.orig/arch/powerpc/platforms/52xx/mpc52xx_common.c 2009-03-3=
1 13:25:08.000000000 +0200
> +++ linux-2.6/arch/powerpc/platforms/52xx/mpc52xx_common.c =A0 =A0 =A0200=
9-03-31 13:28:54.309718526 +0200
> +int fsl_i2c_get_fdr(struct device_node *node, u32 i2c_clock, u32 i2c_fla=
gs)
> +{
> [...]
> +}
> +EXPORT_SYMBOL(fsl_i2c_get_fdr);

does not work on a multiplatform kernel.  Both 8xxx and 52xx support
can be selected at the same time.

g.

--=20
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

  reply	other threads:[~2009-03-31 15:41 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-31 12:37 [PATCH 0/8] powerpc: i2c-mpc: make I2C bus speed configurable Wolfgang Grandegger
2009-03-31 12:37 ` [PATCH 1/8] [PATCH 3/4] powerpc/85xx: Move gianfar mdio nodes under the Wolfgang Grandegger
2009-03-31 12:37 ` [PATCH 2/8] [PATCH 01/28] RTC: Add support for RX8025 chip Wolfgang Grandegger
2009-03-31 12:37 ` [PATCH 3/8] powerpc/85xx: Add support for the "socrates" board (MPC8544) Wolfgang Grandegger
2009-03-31 15:57   ` Grant Likely
2009-03-31 19:20     ` Wolfgang Grandegger
2009-03-31 12:37 ` [PATCH 4/8] powerpc: i2c-mpc: preserve I2C clocking Wolfgang Grandegger
2009-03-31 12:37 ` [PATCH 5/8] powerpc: i2c-mpc: make I2C bus speed configurable Wolfgang Grandegger
2009-03-31 15:41   ` Grant Likely [this message]
2009-04-01  7:51     ` Wolfgang Grandegger
2009-04-01 13:30       ` Grant Likely
2009-04-01 13:41         ` Wolfgang Grandegger
2009-04-01 13:55           ` Wolfgang Grandegger
2009-04-01 13:55           ` Grant Likely
2009-04-02  6:55             ` Wolfgang Grandegger
2009-03-31 12:37 ` [PATCH 6/8] --- arch/powerpc/boot/dts/socrates.dts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) Wolfgang Grandegger
2009-03-31 23:04   ` David Gibson
2009-04-01  7:31     ` Wolfgang Grandegger
2009-04-01 11:09       ` David Gibson
2009-04-01 11:59         ` Wolfgang Grandegger
2009-04-01 23:57           ` David Gibson
2009-04-01 12:30         ` Anton Vorontsov
2009-04-01 23:58           ` David Gibson
2009-03-31 12:37 ` [PATCH 7/8] Re: [PATCH 1/2] NAND: Add support for oob size 128 Wolfgang Grandegger
2009-03-31 12:37 ` [PATCH 8/8] NAND: Add support for NAND on the Socrates board Wolfgang Grandegger
2009-03-31 12:49 ` [PATCH 0/8] powerpc: i2c-mpc: make I2C bus speed configurable Wolfgang Grandegger
2009-03-31 16:23   ` Grant Likely

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=fa686aa40903310841x42876819rafe3e8bf24b8646e@mail.gmail.com \
    --to=grant.likely@secretlab.ca \
    --cc=devicetree-discuss@ozlabs.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=wg@grandegger.com \
    /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).