From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Mon, 25 Nov 2013 07:46:27 +0100 Subject: [U-Boot] [PATCH] driver: i2c:s3c24x0: init each channel during probe In-Reply-To: References: <1385110121-11890-1-git-send-email-ch.naveen@samsung.com> Message-ID: <5292F243.5030304@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Naveen, Am 22.11.2013 09:50, schrieb Naveen Krishna Ch: > Hello All, > > On 22 November 2013 14:18, Naveen Krishna Chatradhi > 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 >> --- >> 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