All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heiko Schocher <hs@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/2] i2c: move to new subsystem
Date: Tue, 17 Sep 2013 06:41:51 +0200	[thread overview]
Message-ID: <5237DD8F.5050203@denx.de> (raw)
In-Reply-To: <1379272182-8607-2-git-send-email-tremyfr@yahoo.fr>

Hello Philippe,

added stefano babic, as he is the imx custodian, to cc

Am 15.09.2013 21:09, schrieb Philippe Reynes:
> Signed-off-by: Philippe Reynes<tremyfr@yahoo.fr>
> ---
>   README                         |    3 +
>   arch/arm/cpu/armv7/mx5/clock.c |    2 +-
>   arch/arm/cpu/armv7/mx6/clock.c |    2 +-
>   arch/arm/imx-common/Makefile   |    2 +-
>   drivers/i2c/Makefile           |    2 +-
>   drivers/i2c/mxc_i2c.c          |  109 ++++++++++++++++++---------------------
>   6 files changed, 57 insertions(+), 63 deletions(-)

First, thanks for this work!

Could you please change your subject in something like

"i2c, mxc: switch to new multibus/multiadapter framework" ?

> diff --git a/README b/README
> index 63706be..7c734ba 100644
> --- a/README
> +++ b/README
> @@ -1995,6 +1995,9 @@ CBFS (Coreboot Filesystem) support
>   		  - CONFIG_SYS_I2C_PPC4XX_CH0 activate hardware channel 0
>   		  - CONFIG_SYS_I2C_PPC4XX_CH1 activate hardware channel 1
>
> +		- drivers/i2c/i2c_mxc.c
> +		 - activate this driver with CONFIG_SYS_I2C_MXC
> +

You should use some new defines for the speed setting ... did you?
If not please add them, thanks.

>   		additional defines:
>
>   		CONFIG_SYS_NUM_I2C_BUSES
[...]
> diff --git a/drivers/i2c/Makefile b/drivers/i2c/Makefile
> index 37ccbd1..f9fcebe 100644
> --- a/drivers/i2c/Makefile
> +++ b/drivers/i2c/Makefile
> @@ -14,7 +14,7 @@ COBJS-$(CONFIG_DRIVER_DAVINCI_I2C) += davinci_i2c.o
>   COBJS-$(CONFIG_DW_I2C) += designware_i2c.o
>   COBJS-$(CONFIG_I2C_MVTWSI) += mvtwsi.o
>   COBJS-$(CONFIG_I2C_MV) += mv_i2c.o
> -COBJS-$(CONFIG_I2C_MXC) += mxc_i2c.o
> +COBJS-$(CONFIG_SYS_I2C_MXC) += mxc_i2c.o

Please keep this list sorted.

>   COBJS-$(CONFIG_I2C_MXS) += mxs_i2c.o
>   COBJS-$(CONFIG_DRIVER_OMAP1510_I2C) += omap1510_i2c.o
>   COBJS-$(CONFIG_DRIVER_OMAP24XX_I2C) += omap24xx_i2c.o
> diff --git a/drivers/i2c/mxc_i2c.c b/drivers/i2c/mxc_i2c.c
> index 06ba4e3..3ac1865 100644
> --- a/drivers/i2c/mxc_i2c.c
> +++ b/drivers/i2c/mxc_i2c.c
> @@ -153,21 +153,6 @@ static int bus_i2c_set_bus_speed(void *base, int speed)
>   	return 0;
>   }
>
> -/*
> - * Get I2C Speed
> - */
> -static unsigned int bus_i2c_get_bus_speed(void *base)
> -{
> -	struct mxc_i2c_regs *i2c_regs = (struct mxc_i2c_regs *)base;
> -	u8 clk_idx = readb(&i2c_regs->ifdr);
> -	u8 clk_div;
> -
> -	for (clk_div = 0; i2c_clk_div[clk_div][1] != clk_idx; clk_div++)
> -		;
> -
> -	return mxc_get_clock(MXC_I2C_CLK) / i2c_clk_div[clk_div][0];
> -}
> -
>   #define ST_BUS_IDLE (0 | (I2SR_IBB<<  8))
>   #define ST_BUS_BUSY (I2SR_IBB | (I2SR_IBB<<  8))
>   #define ST_IIF (I2SR_IIF | (I2SR_IIF<<  8))
> @@ -410,20 +395,30 @@ struct sram_data {
>    */
>   static struct sram_data __attribute__((section(".data"))) srdata;
>
> -void *get_base(void)
> -{
> -#ifdef CONFIG_SYS_I2C_BASE
> -#ifdef CONFIG_I2C_MULTI_BUS
> -	void *ret = srdata.i2c_data[srdata.curr_i2c_bus].base;
> -	if (ret)
> -		return ret;
> -#endif
> -	return (void *)CONFIG_SYS_I2C_BASE;
> -#elif defined(CONFIG_I2C_MULTI_BUS)
> -	return srdata.i2c_data[srdata.curr_i2c_bus].base;
> +static void * const i2c_bases[] = {
> +#if defined(CONFIG_MX25)
> +	(void *)IMX_I2C_BASE,
> +	(void *)IMX_I2C2_BASE,
> +	(void *)IMX_I2C3_BASE
> +#elif defined(CONFIG_MX27)
> +	(void *)IMX_I2C1_BASE,
> +	(void *)IMX_I2C2_BASE
> +#elif defined(CONFIG_MX31) || defined(CONFIG_MX35) || \
> +	defined(CONFIG_MX51) || defined(CONFIG_MX53) ||	\
> +	defined(CONFIG_MX6)
> +	(void *)I2C1_BASE_ADDR,
> +	(void *)I2C2_BASE_ADDR,
> +	(void *)I2C3_BASE_ADDR
> +#elif defined(CONFIG_VF610)
> +	(void *)I2C0_BASE_ADDR
>   #else
> -	return srdata.i2c_data[0].base;
> +#error "architecture not supported"
>   #endif
> +};
> +
> +void *i2c_get_base(struct i2c_adapter *adap)
> +{
> +	return i2c_bases[adap->hwadapnr];
>   }
>
>   static struct i2c_parms *i2c_get_parms(void *base)
> @@ -448,39 +443,26 @@ static int i2c_idle_bus(void *base)
>   	return 0;
>   }
>
> -#ifdef CONFIG_I2C_MULTI_BUS
> -unsigned int i2c_get_bus_num(void)
> +int mxc_i2c_read(struct i2c_adapter *adap, uint8_t chip,

static now

> +				uint addr, int alen, uint8_t *buffer,
> +				int len)
>   {
> -	return srdata.curr_i2c_bus;
> +	return bus_i2c_read(i2c_get_base(adap), chip, addr, alen, buffer, len);
>   }
>
> -int i2c_set_bus_num(unsigned bus_idx)
> -{
> -	if (bus_idx>= ARRAY_SIZE(srdata.i2c_data))
> -		return -1;
> -	if (!srdata.i2c_data[bus_idx].base)
> -		return -1;
> -	srdata.curr_i2c_bus = bus_idx;
> -	return 0;
> -}
> -#endif
> -
> -int i2c_read(uchar chip, uint addr, int alen, uchar *buf, int len)
> +int mxc_i2c_write(struct i2c_adapter *adap, uint8_t chip,

static now

> +				uint addr, int alen, uint8_t *buffer,
> +				int len)
>   {
> -	return bus_i2c_read(get_base(), chip, addr, alen, buf, len);
> -}
> -
> -int i2c_write(uchar chip, uint addr, int alen, uchar *buf, int len)
> -{
> -	return bus_i2c_write(get_base(), chip, addr, alen, buf, len);
> +	return bus_i2c_write(i2c_get_base(adap), chip, addr, alen, buffer, len);
>   }
>
>   /*
>    * Test if a chip at a given address responds (probe the chip)
>    */
> -int i2c_probe(uchar chip)
> +int mxc_i2c_probe(struct i2c_adapter *adap, uint8_t chip)

static now

>   {
> -	return bus_i2c_write(get_base(), chip, 0, 0, NULL, 0);
> +	return bus_i2c_write(i2c_get_base(adap), chip, 0, 0, NULL, 0);
>   }
>
>   void bus_i2c_init(void *base, int speed, int unused,
> @@ -510,23 +492,32 @@ void bus_i2c_init(void *base, int speed, int unused,
>   /*
>    * Init I2C Bus
>    */
> -void i2c_init(int speed, int unused)
> +void mxc_i2c_init(struct i2c_adapter *adap, int speed, int slaveaddr)

static now

>   {
> -	bus_i2c_init(get_base(), speed, unused, NULL, NULL);
> +	bus_i2c_init(i2c_get_base(adap), speed, slaveaddr, NULL, NULL);
>   }
>
>   /*
>    * Set I2C Speed
>    */
> -int i2c_set_bus_speed(unsigned int speed)
> +uint mxc_i2c_set_bus_speed(struct i2c_adapter *adap, uint speed)

static now

>   {
> -	return bus_i2c_set_bus_speed(get_base(), speed);
> +	return bus_i2c_set_bus_speed(i2c_get_base(adap), speed);
>   }
>
>   /*
> - * Get I2C Speed
> + * Register mxc i2c adapters
>    */
> -unsigned int i2c_get_bus_speed(void)
> -{
> -	return bus_i2c_get_bus_speed(get_base());
> -}
> +U_BOOT_I2C_ADAP_COMPLETE(mxc0, mxc_i2c_init, mxc_i2c_probe,
> +			 mxc_i2c_read, mxc_i2c_write,
> +			 mxc_i2c_set_bus_speed, 100000, 0, 0)
                                                 ^
shouldn;t we do this here configurable? Or is the speed and slave
setting for all imx boards the same?

> +U_BOOT_I2C_ADAP_COMPLETE(mxc1, mxc_i2c_init, mxc_i2c_probe,
> +			 mxc_i2c_read, mxc_i2c_write,
> +			 mxc_i2c_set_bus_speed, 100000, 0, 1)
> +#if defined(CONFIG_MX31) || defined(CONFIG_MX35) ||\
> +	defined(CONFIG_MX51) || defined(CONFIG_MX53) ||\
> +	defined(CONFIG_MX6)
> +U_BOOT_I2C_ADAP_COMPLETE(mxc2, mxc_i2c_init, mxc_i2c_probe,
> +			 mxc_i2c_read, mxc_i2c_write,
> +			 mxc_i2c_set_bus_speed, 100000, 0, 2)
> +#endif

bye,
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

  parent reply	other threads:[~2013-09-17  4:41 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-15 19:09 [U-Boot] [PATCH 0/2] i2c: port i2c driver to new subsystem Philippe Reynes
2013-09-15 19:09 ` [U-Boot] [PATCH 1/2] i2c: move " Philippe Reynes
2013-09-15 21:12   ` Albert ARIBAUD
2013-09-17  4:41   ` Heiko Schocher [this message]
2013-09-15 19:09 ` [U-Boot] [PATCH 2/2] i2c: update config using mxc driver " Philippe Reynes
2013-09-17  4:51   ` Heiko Schocher
2013-09-16 23:20 ` [U-Boot] [PATCH 0/2] i2c: port i2c " Eric Nelson

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=5237DD8F.5050203@denx.de \
    --to=hs@denx.de \
    --cc=u-boot@lists.denx.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.