From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161196AbcFAOOq (ORCPT ); Wed, 1 Jun 2016 10:14:46 -0400 Received: from mail-qk0-f196.google.com ([209.85.220.196]:34162 "EHLO mail-qk0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758382AbcFAOOn (ORCPT ); Wed, 1 Jun 2016 10:14:43 -0400 MIME-Version: 1.0 In-Reply-To: References: <1462980974-22091-1-git-send-email-cedric.madianga@gmail.com> <1462980974-22091-3-git-send-email-cedric.madianga@gmail.com> Date: Wed, 1 Jun 2016 16:14:37 +0200 Message-ID: Subject: Re: [PATCH 2/5] i2c: Add STM32F4 I2C driver From: Maxime Coquelin To: "M'boumba Cedric Madianga" Cc: Patrice Chotard , Wolfram Sang , Rob Herring , Russell King , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , linux-i2c@vger.kernel.org Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2016-06-01 16:01 GMT+02:00 M'boumba Cedric Madianga : > Hi Maxime, > >>>> +static void stm32f4_i2c_set_speed_mode(struct stm32f4_i2c_dev *i2c_dev) >>>> +{ >>>> + struct stm32f4_i2c_timings *t = &i2c_timings[i2c_dev->speed]; >>>> + u32 ccr, val, clk_rate; >>>> + >>>> + ccr = readl_relaxed(i2c_dev->base + STM32F4_I2C_CCR); >>>> + ccr &= ~(STM32F4_I2C_CCR_FS | STM32F4_I2C_CCR_DUTY | >>>> + STM32F4_I2C_CCR_CCR_MASK); >>>> + >>>> + clk_rate = clk_get_rate(i2c_dev->clk); >>>> + >>>> + switch (i2c_dev->speed) { >>>> + case STM32F4_I2C_SPEED_STANDARD: >>>> + val = clk_rate / t->rate * 2; >>>> + if (val < STM32F4_I2C_MIN_CCR) >>>> + ccr |= STM32F4_I2C_CCR_CCR(STM32F4_I2C_MIN_CCR); >>>> + else >>>> + ccr |= STM32F4_I2C_CCR_CCR(val); >>>> + break; >>>> + case STM32F4_I2C_SPEED_FAST: >>>> + ccr |= STM32F4_I2C_CCR_FS; >>>> + if (t->duty) { >>>> + ccr |= STM32F4_I2C_CCR_DUTY; >>>> + ccr |= STM32F4_I2C_CCR_CCR(clk_rate / t->rate * 25); >>>> + } else { >>>> + ccr |= STM32F4_I2C_CCR_CCR(clk_rate / t->rate * 3); >>>> + } >>> Is it really useful since duty seems to always be 0? >> Agree, I will rework it by directly set duty at 0 in the register. > > Contrary to what I wrote previously, the duty has to be set for FAST > Mode to reach 400khz. > So, I am going to keep the timing struct and set duty to 1 for FAST mode Ok, That's fine by me.