[U-Boot] [PATCH 4/7] i2c: mxs: Abstract out the MXS I2C speed setup

Wolfgang Denk wd at denx.de
Tue Nov 13 09:29:27 CET 2012


Dear Marek,

In message <1352766871-892-4-git-send-email-marex at denx.de> you wrote:
> This patch pulls out the I2C speed setup from the i2c_init() call
> and implements the bus configuration lookup table with register
> values that needs to be programmed into the I2C IP to run at
> particular speed.
> 
> This patch is a first step towards implementing run-time I2C bus
> speed configuration for the MXS I2C IP.

Thanks.

> +static struct mxs_i2c_speed_table {
> +	uint32_t	speed;
> +	uint32_t	timing0;
> +	uint32_t	timing1;
> +} mxs_i2c_tbl[] = {
> +	{
> +		100000,
> +		(0x0078 << I2C_TIMING0_HIGH_COUNT_OFFSET) |
> +		(0x0030 << I2C_TIMING0_RCV_COUNT_OFFSET),
> +		(0x0080 << I2C_TIMING1_LOW_COUNT_OFFSET) |
> +		(0x0030 << I2C_TIMING1_XMIT_COUNT_OFFSET)
> +	},
> +	{
> +		400000,
> +		(0x000f << I2C_TIMING0_HIGH_COUNT_OFFSET) |
> +		(0x0007 << I2C_TIMING0_RCV_COUNT_OFFSET),
> +		(0x001f << I2C_TIMING1_LOW_COUNT_OFFSET) |
> +		(0x000f << I2C_TIMING1_XMIT_COUNT_OFFSET),
> +	}
> +};

Do we really need such a compile-time initialized table which will
have to include all possible I2C speeds anybody is ever going to use
on any board?

And if board XXX wants to use a funny I2C clock, we have to add yet
another entry to this common file?   Such a solution does not scale.

Can we not rather calculate these register values for any arbitrary
I2C clock given?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Microsoft Compatibility:
     your old Windows 3.11 application crash exactly as the new ones.


More information about the U-Boot mailing list