[U-Boot] [PATCH] driver: i2c:s3c24x0: init each channel during probe
Heiko Schocher
hs at denx.de
Mon Nov 25 07:46:27 CET 2013
Hello Naveen,
Am 22.11.2013 09:50, schrieb Naveen Krishna Ch:
> Hello All,
>
> On 22 November 2013 14:18, Naveen Krishna Chatradhi
> <ch.naveen at samsung.com> wrote:
>> Each I2C channel must be inited during the probe and then set "active"
>> instead of initing the channel for every time we select the bus
>> using "i2c dev bus"
>>
>> Signed-off-by: Naveen Krishna Chatradhi<ch.naveen at samsung.com>
>> ---
>> drivers/i2c/s3c24x0_i2c.c | 29 +++++++++++++----------------
>> 1 file changed, 13 insertions(+), 16 deletions(-)
This patch do not apply based on the patches from Piotr Wilczek, see
[U-Boot,V2,1/2] driver:i2c:s3c24x0: adapt driver to new i2c
http://patchwork.ozlabs.org/patch/292705/
[U-Boot,2/2] driver:i2c:s3c24x0: fix clock init for hsi2c
http://patchwork.ozlabs.org/patch/292706/
Could you rebase your patch on base of this two patches?
Thanks!
>> diff --git a/drivers/i2c/s3c24x0_i2c.c b/drivers/i2c/s3c24x0_i2c.c
>> index f77a9d1..7136771 100644
>> --- a/drivers/i2c/s3c24x0_i2c.c
>> +++ b/drivers/i2c/s3c24x0_i2c.c
>> @@ -408,22 +408,7 @@ static void exynos5_i2c_reset(struct s3c24x0_i2c_bus *i2c_bus)
>> #ifdef CONFIG_I2C_MULTI_BUS
>> int i2c_set_bus_num(unsigned int bus)
>> {
>> - struct s3c24x0_i2c_bus *i2c_bus;
>> -
>> - i2c_bus = get_bus(bus);
>> - if (!i2c_bus)
>> - return -1;
>> g_current_bus = bus;
>> -
>> - if (i2c_bus->is_highspeed) {
>> - if (hsi2c_get_clk_details(i2c_bus))
>> - return -1;
>> - hsi2c_ch_init(i2c_bus);
>> - } else {
>> - i2c_ch_init(i2c_bus->regs, i2c_bus->clock_frequency,
>> - CONFIG_SYS_I2C_SLAVE);
>> - }
>> -
>> return 0;
>> }
>>
>> @@ -989,7 +974,6 @@ static void process_nodes(const void *blob, int node_list[], int count,
>> continue;
>>
>> bus =&i2c_bus[i];
>> - bus->active = true;
>> bus->is_highspeed = is_highspeed;
>>
>> if (is_highspeed)
>> @@ -1009,6 +993,19 @@ static void process_nodes(const void *blob, int node_list[], int count,
>>
>> /* Mark position as used */
>> node_list[i] = -1;
>> +
>> + if (bus->is_highspeed) {
>> + if (hsi2c_get_clk_details(bus)) {
>> + bus->active = false;
>> + break;
>> + }
>> + hsi2c_ch_init(bus);
>> + exynos5_i2c_reset(bus);
>
> HSI2C module on Exynos5260 needs a reset of module during reset.
> Similar patch is being posted for kernel at
> http://www.kernelhub.org/?msg=365741&p=2
>
> As this is a one time activity, guess resetting all channels is not a problem.
Ok, from my side.
> I can implement a "SoC type quirk" to distinguish otherwise.
bye,
Heiko
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
More information about the U-Boot
mailing list