diff options
Diffstat (limited to 'drivers/i2c/busses/i2c-imx.c')
-rw-r--r-- | drivers/i2c/busses/i2c-imx.c | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index 7d25ed3af5..f6a67ec067 100644 --- a/drivers/i2c/busses/i2c-imx.c +++ b/drivers/i2c/busses/i2c-imx.c @@ -1,18 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0-or-later /* * Copyright 2012 GE Intelligent Platforms, Inc * Copyright (C) 2002 Motorola GSG-China * 2009 Marc Kleine-Budde, Pengutronix * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * * Author: * Darius Augulis, Teltonika Inc. * @@ -111,6 +102,7 @@ struct fsl_i2c_hwdata { struct fsl_i2c_struct { void __iomem *base; struct clk *clk; + struct device *dev; struct i2c_adapter adapter; unsigned int disable_delay; unsigned int ifdr; /* FSL_I2C_IFDR */ @@ -210,7 +202,7 @@ static int i2c_fsl_trx_complete(struct i2c_adapter *adapter) static int i2c_fsl_acked(struct i2c_adapter *adapter) { - return i2c_fsl_poll_status(adapter, 1, 0, I2SR_RXAK); + return i2c_fsl_poll_status(adapter, 5, 0, I2SR_RXAK); } static int i2c_fsl_start(struct i2c_adapter *adapter) @@ -304,7 +296,7 @@ static void i2c_fsl_set_clk(struct fsl_i2c_struct *i2c_fsl, * Translate to dfsr = 5 * Frequency / 100,000,000 */ dfsr = (5 * (i2c_clk / 1000)) / 100000; - dev_dbg(&i2c_fsl->adapter.dev, + dev_dbg(i2c_fsl->dev, "<%s> requested speed:%d, i2c_clk:%d\n", __func__, rate, i2c_clk); if (!dfsr) @@ -323,12 +315,12 @@ static void i2c_fsl_set_clk(struct fsl_i2c_struct *i2c_fsl, bin_ga = (ga & 0x3) | ((ga & 0x4) << 3); fdr = bin_gb | bin_ga; rate = i2c_clk / est_div; - dev_dbg(&i2c_fsl->adapter.dev, + dev_dbg(i2c_fsl->dev, "FDR:0x%.2x, div:%ld, ga:0x%x, gb:0x%x," " a:%d, b:%d, speed:%d\n", fdr, est_div, ga, gb, a, b, rate); /* Condition 2 not accounted for */ - dev_dbg(&i2c_fsl->adapter.dev, + dev_dbg(i2c_fsl->dev, "Tr <= %d ns\n", (b - 3 * dfsr) * 1000000 / (i2c_clk / 1000)); } @@ -338,9 +330,9 @@ static void i2c_fsl_set_clk(struct fsl_i2c_struct *i2c_fsl, if (a == 24) a += 4; } - dev_dbg(&i2c_fsl->adapter.dev, + dev_dbg(i2c_fsl->dev, "divider:%d, est_div:%ld, DFSR:%d\n", divider, est_div, dfsr); - dev_dbg(&i2c_fsl->adapter.dev, "FDR:0x%.2x, speed:%d\n", fdr, rate); + dev_dbg(i2c_fsl->dev, "FDR:0x%.2x, speed:%d\n", fdr, rate); i2c_fsl->ifdr = fdr; i2c_fsl->dfsrr = dfsr; } @@ -377,9 +369,9 @@ static void i2c_fsl_set_clk(struct fsl_i2c_struct *i2c_fsl, (500000U * i2c_clk_div[i].div + (i2c_clk_rate / 2) - 1) / (i2c_clk_rate / 2); - dev_dbg(&i2c_fsl->adapter.dev, "<%s> I2C_CLK=%d, REQ DIV=%d\n", + dev_dbg(i2c_fsl->dev, "<%s> I2C_CLK=%d, REQ DIV=%d\n", __func__, i2c_clk_rate, div); - dev_dbg(&i2c_fsl->adapter.dev, "<%s> IFDR[IC]=0x%x, REAL DIV=%d\n", + dev_dbg(i2c_fsl->dev, "<%s> IFDR[IC]=0x%x, REAL DIV=%d\n", __func__, i2c_clk_div[i].val, i2c_clk_div[i].div); } #endif @@ -534,15 +526,18 @@ static void i2c_fsl_unprepare_recovery(struct i2c_adapter *adapter) dev_err(adapter->dev.parent, "pinctrl failed: %s\n", strerror(-ret)); } -static void i2c_fsl_init_recovery(struct fsl_i2c_struct *i2c_fsl, struct device_d *dev) +static void i2c_fsl_init_recovery(struct fsl_i2c_struct *i2c_fsl, + struct device *dev) { - if (!dev->device_node) + if (!dev->of_node) return; - i2c_fsl->rinfo.sda_gpio = of_get_named_gpio_flags(dev->device_node, - "sda-gpios", 0, NULL); - i2c_fsl->rinfo.scl_gpio = of_get_named_gpio_flags(dev->device_node, - "scl-gpios", 0, NULL); + i2c_fsl->rinfo.sda_gpio = of_get_named_gpio_flags(dev->of_node, + "sda-gpios", 0, + NULL); + i2c_fsl->rinfo.scl_gpio = of_get_named_gpio_flags(dev->of_node, + "scl-gpios", 0, + NULL); if (!gpio_is_valid(i2c_fsl->rinfo.sda_gpio) || !gpio_is_valid(i2c_fsl->rinfo.scl_gpio)) @@ -559,7 +554,7 @@ static void i2c_fsl_init_recovery(struct fsl_i2c_struct *i2c_fsl, struct device_ dev_dbg(dev, "initialized recovery info\n"); } -static int __init i2c_fsl_probe(struct device_d *pdev) +static int __init i2c_fsl_probe(struct device *pdev) { struct resource *iores; struct fsl_i2c_struct *i2c_fsl; @@ -570,6 +565,7 @@ static int __init i2c_fsl_probe(struct device_d *pdev) pdata = pdev->platform_data; i2c_fsl = xzalloc(sizeof(*i2c_fsl)); + i2c_fsl->dev = pdev; #ifdef CONFIG_COMMON_CLK i2c_fsl->clk = clk_get(pdev, NULL); @@ -594,7 +590,7 @@ static int __init i2c_fsl_probe(struct device_d *pdev) i2c_fsl->adapter.master_xfer = i2c_fsl_xfer; i2c_fsl->adapter.nr = pdev->id; i2c_fsl->adapter.dev.parent = pdev; - i2c_fsl->adapter.dev.device_node = pdev->device_node; + i2c_fsl->adapter.dev.of_node = pdev->of_node; iores = dev_request_mem_resource(pdev, 0); if (IS_ERR(iores)) { ret = PTR_ERR(iores); @@ -608,7 +604,7 @@ static int __init i2c_fsl_probe(struct device_d *pdev) /* Set up clock divider */ bitrate = 100000; - of_property_read_u32(pdev->device_node, "clock-frequency", &bitrate); + of_property_read_u32(pdev->of_node, "clock-frequency", &bitrate); if (pdata && pdata->bitrate) bitrate = pdata->bitrate; @@ -654,8 +650,9 @@ static __maybe_unused struct of_device_id imx_i2c_dt_ids[] = { { .compatible = "fsl,vf610-i2c", .data = &vf610_i2c_hwdata, }, { /* sentinel */ } }; +MODULE_DEVICE_TABLE(of, imx_i2c_dt_ids); -static struct driver_d i2c_fsl_driver = { +static struct driver i2c_fsl_driver = { .probe = i2c_fsl_probe, .name = "i2c-fsl", .of_compatible = DRV_OF_COMPAT(imx_i2c_dt_ids), |