Message ID | 1542370822-14721-3-git-send-email-pierre-yves.mordret@st.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | SYSCFG Fast Mode Plus support for I2C STM32F7 | expand |
Hi Pierre-Yves, I love your patch! Yet something to improve: [auto build test ERROR on wsa/i2c/for-next] [also build test ERROR on v4.20-rc2 next-20181116] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Pierre-Yves-MORDRET/SYSCFG-Fast-Mode-Plus-support-for-I2C-STM32F7/20181118-135056 base: https://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/for-next config: s390-allmodconfig (attached as .config) compiler: s390x-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree GCC_VERSION=7.2.0 make.cross ARCH=s390 All errors (new ones prefixed by >>): drivers/i2c/busses/i2c-stm32f7.c: In function 'stm32f7_i2c_setup_fm_plus_bits': >> drivers/i2c/busses/i2c-stm32f7.c:1790:9: error: implicit declaration of function 'regmap_update_bits'; did you mean 'set_pgste_bits'? [-Werror=implicit-function-declaration] return regmap_update_bits(i2c_dev->regmap, reg, mask, mask); ^~~~~~~~~~~~~~~~~~ set_pgste_bits cc1: some warnings being treated as errors vim +1790 drivers/i2c/busses/i2c-stm32f7.c 1768 1769 static int stm32f7_i2c_setup_fm_plus_bits(struct platform_device *pdev, 1770 struct stm32f7_i2c_dev *i2c_dev) 1771 { 1772 struct device_node *np = pdev->dev.of_node; 1773 int ret; 1774 u32 reg, mask; 1775 1776 i2c_dev->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg-fmp"); 1777 if (IS_ERR(i2c_dev->regmap)) { 1778 /* Optional */ 1779 return 0; 1780 } 1781 1782 ret = of_property_read_u32_index(np, "st,syscfg-fmp", 1, ®); 1783 if (ret) 1784 return ret; 1785 1786 ret = of_property_read_u32_index(np, "st,syscfg-fmp", 2, &mask); 1787 if (ret) 1788 return ret; 1789 > 1790 return regmap_update_bits(i2c_dev->regmap, reg, mask, mask); 1791 } 1792 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Hi Pierre-Yves, I love your patch! Yet something to improve: [auto build test ERROR on wsa/i2c/for-next] [also build test ERROR on v4.20-rc2 next-20181116] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Pierre-Yves-MORDRET/SYSCFG-Fast-Mode-Plus-support-for-I2C-STM32F7/20181118-135056 base: https://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/for-next config: xtensa-allmodconfig (attached as .config) compiler: xtensa-linux-gcc (GCC) 8.1.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree GCC_VERSION=8.1.0 make.cross ARCH=xtensa All errors (new ones prefixed by >>): drivers/i2c//busses/i2c-stm32f7.c: In function 'stm32f7_i2c_setup_fm_plus_bits': >> drivers/i2c//busses/i2c-stm32f7.c:1790:9: error: implicit declaration of function 'regmap_update_bits'; did you mean 'file_update_time'? [-Werror=implicit-function-declaration] return regmap_update_bits(i2c_dev->regmap, reg, mask, mask); ^~~~~~~~~~~~~~~~~~ file_update_time cc1: some warnings being treated as errors vim +1790 drivers/i2c//busses/i2c-stm32f7.c 1768 1769 static int stm32f7_i2c_setup_fm_plus_bits(struct platform_device *pdev, 1770 struct stm32f7_i2c_dev *i2c_dev) 1771 { 1772 struct device_node *np = pdev->dev.of_node; 1773 int ret; 1774 u32 reg, mask; 1775 1776 i2c_dev->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg-fmp"); 1777 if (IS_ERR(i2c_dev->regmap)) { 1778 /* Optional */ 1779 return 0; 1780 } 1781 1782 ret = of_property_read_u32_index(np, "st,syscfg-fmp", 1, ®); 1783 if (ret) 1784 return ret; 1785 1786 ret = of_property_read_u32_index(np, "st,syscfg-fmp", 2, &mask); 1787 if (ret) 1788 return ret; 1789 > 1790 return regmap_update_bits(i2c_dev->regmap, reg, mask, mask); 1791 } 1792 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c index 62d023e..8e381b7 100644 --- a/drivers/i2c/busses/i2c-stm32f7.c +++ b/drivers/i2c/busses/i2c-stm32f7.c @@ -21,6 +21,7 @@ #include <linux/interrupt.h> #include <linux/io.h> #include <linux/iopoll.h> +#include <linux/mfd/syscon.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_address.h> @@ -276,6 +277,7 @@ struct stm32f7_i2c_msg { * slave) * @dma: dma data * @use_dma: boolean to know if dma is used in the current transfer + * @regmap: holds SYSCFG phandle for Fast Mode Plus bits */ struct stm32f7_i2c_dev { struct i2c_adapter adap; @@ -296,6 +298,7 @@ struct stm32f7_i2c_dev { bool master_mode; struct stm32_i2c_dma *dma; bool use_dma; + struct regmap *regmap; }; /** @@ -1763,6 +1766,30 @@ static int stm32f7_i2c_unreg_slave(struct i2c_client *slave) return 0; } +static int stm32f7_i2c_setup_fm_plus_bits(struct platform_device *pdev, + struct stm32f7_i2c_dev *i2c_dev) +{ + struct device_node *np = pdev->dev.of_node; + int ret; + u32 reg, mask; + + i2c_dev->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg-fmp"); + if (IS_ERR(i2c_dev->regmap)) { + /* Optional */ + return 0; + } + + ret = of_property_read_u32_index(np, "st,syscfg-fmp", 1, ®); + if (ret) + return ret; + + ret = of_property_read_u32_index(np, "st,syscfg-fmp", 2, &mask); + if (ret) + return ret; + + return regmap_update_bits(i2c_dev->regmap, reg, mask, mask); +} + static u32 stm32f7_i2c_func(struct i2c_adapter *adap) { return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | I2C_FUNC_SLAVE | @@ -1828,12 +1855,16 @@ static int stm32f7_i2c_probe(struct platform_device *pdev) i2c_dev->speed = STM32_I2C_SPEED_STANDARD; ret = device_property_read_u32(&pdev->dev, "clock-frequency", &clk_rate); - if (!ret && clk_rate >= 1000000) + if (!ret && clk_rate >= 1000000) { i2c_dev->speed = STM32_I2C_SPEED_FAST_PLUS; - else if (!ret && clk_rate >= 400000) + ret = stm32f7_i2c_setup_fm_plus_bits(pdev, i2c_dev); + if (ret) + goto clk_free; + } else if (!ret && clk_rate >= 400000) { i2c_dev->speed = STM32_I2C_SPEED_FAST; - else if (!ret && clk_rate >= 100000) + } else if (!ret && clk_rate >= 100000) { i2c_dev->speed = STM32_I2C_SPEED_STANDARD; + } rst = devm_reset_control_get(&pdev->dev, NULL); if (IS_ERR(rst)) {
Read SYSCFG bindings to set Fast Mode Plus bits if Fast Mode Plus speed is selected. Signed-off-by: Pierre-Yves MORDRET <pierre-yves.mordret@st.com> --- Version history: v1: * Initial --- --- drivers/i2c/busses/i2c-stm32f7.c | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-)