Commit f3a36fbd authored by Thomas Petazzoni's avatar Thomas Petazzoni Committed by Wolfram Sang

i2c: mv64xxx: remove CONFIG_HAVE_CLK conditionals

When clock support was added to the i2c-mv64xxx, not all clk functions
had stubs when for !CONFIG_HAVE_CLK configurations. However, nowadays,
both "struct clk" and all the clock framework functions have stubs
when CONFIG_HAVE_CLK is not enabled, so it no longer makes sense to
carry such compile-time conditionals in the driver.

This commit was compile tested on both ARM64 (which has both
CONFIG_OF=y and CONFIG_HAVE_CLK=y) and PowerPC c2k_defconfig (which
has CONFIG_OF=y, CONFIG_HAVE_CLK disabled, and the i2c-mv64xxx driver
enabled).

The only non-trivial change is in the mv64xxx_of_config() function,
which was returning -ENODEV unconditionally if CONFIG_HAVE_CLK was
disabled. Simply removing this condition works fine because the first
test done by the function is to verify if drv_data->clk points to a
valid clock, and if it doesn't, we return -ENODEV. When
CONFIG_HAVE_CLK is disabled, devm_clk_get() unconditionally returns
NULL, so mv64xxx_of_config() will return -ENODEV when no clock is
provided, which is the intended behavior.
Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
parent 70719350
...@@ -134,9 +134,7 @@ struct mv64xxx_i2c_data { ...@@ -134,9 +134,7 @@ struct mv64xxx_i2c_data {
int rc; int rc;
u32 freq_m; u32 freq_m;
u32 freq_n; u32 freq_n;
#if defined(CONFIG_HAVE_CLK)
struct clk *clk; struct clk *clk;
#endif
wait_queue_head_t waitq; wait_queue_head_t waitq;
spinlock_t lock; spinlock_t lock;
struct i2c_msg *msg; struct i2c_msg *msg;
...@@ -757,7 +755,6 @@ static const struct of_device_id mv64xxx_i2c_of_match_table[] = { ...@@ -757,7 +755,6 @@ static const struct of_device_id mv64xxx_i2c_of_match_table[] = {
MODULE_DEVICE_TABLE(of, mv64xxx_i2c_of_match_table); MODULE_DEVICE_TABLE(of, mv64xxx_i2c_of_match_table);
#ifdef CONFIG_OF #ifdef CONFIG_OF
#ifdef CONFIG_HAVE_CLK
static int static int
mv64xxx_calc_freq(struct mv64xxx_i2c_data *drv_data, mv64xxx_calc_freq(struct mv64xxx_i2c_data *drv_data,
const int tclk, const int n, const int m) const int tclk, const int n, const int m)
...@@ -791,25 +788,20 @@ mv64xxx_find_baud_factors(struct mv64xxx_i2c_data *drv_data, ...@@ -791,25 +788,20 @@ mv64xxx_find_baud_factors(struct mv64xxx_i2c_data *drv_data,
return false; return false;
return true; return true;
} }
#endif /* CONFIG_HAVE_CLK */
static int static int
mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data, mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data,
struct device *dev) struct device *dev)
{ {
/* CLK is mandatory when using DT to describe the i2c bus. We
* need to know tclk in order to calculate bus clock
* factors.
*/
#if !defined(CONFIG_HAVE_CLK)
/* Have OF but no CLK */
return -ENODEV;
#else
const struct of_device_id *device; const struct of_device_id *device;
struct device_node *np = dev->of_node; struct device_node *np = dev->of_node;
u32 bus_freq, tclk; u32 bus_freq, tclk;
int rc = 0; int rc = 0;
/* CLK is mandatory when using DT to describe the i2c bus. We
* need to know tclk in order to calculate bus clock
* factors.
*/
if (IS_ERR(drv_data->clk)) { if (IS_ERR(drv_data->clk)) {
rc = -ENODEV; rc = -ENODEV;
goto out; goto out;
...@@ -869,7 +861,6 @@ mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data, ...@@ -869,7 +861,6 @@ mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data,
out: out:
return rc; return rc;
#endif
} }
#else /* CONFIG_OF */ #else /* CONFIG_OF */
static int static int
...@@ -907,14 +898,13 @@ mv64xxx_i2c_probe(struct platform_device *pd) ...@@ -907,14 +898,13 @@ mv64xxx_i2c_probe(struct platform_device *pd)
init_waitqueue_head(&drv_data->waitq); init_waitqueue_head(&drv_data->waitq);
spin_lock_init(&drv_data->lock); spin_lock_init(&drv_data->lock);
#if defined(CONFIG_HAVE_CLK)
/* Not all platforms have a clk */ /* Not all platforms have a clk */
drv_data->clk = devm_clk_get(&pd->dev, NULL); drv_data->clk = devm_clk_get(&pd->dev, NULL);
if (IS_ERR(drv_data->clk) && PTR_ERR(drv_data->clk) == -EPROBE_DEFER) if (IS_ERR(drv_data->clk) && PTR_ERR(drv_data->clk) == -EPROBE_DEFER)
return -EPROBE_DEFER; return -EPROBE_DEFER;
if (!IS_ERR(drv_data->clk)) if (!IS_ERR(drv_data->clk))
clk_prepare_enable(drv_data->clk); clk_prepare_enable(drv_data->clk);
#endif
if (pdata) { if (pdata) {
drv_data->freq_m = pdata->freq_m; drv_data->freq_m = pdata->freq_m;
drv_data->freq_n = pdata->freq_n; drv_data->freq_n = pdata->freq_n;
...@@ -964,11 +954,10 @@ mv64xxx_i2c_probe(struct platform_device *pd) ...@@ -964,11 +954,10 @@ mv64xxx_i2c_probe(struct platform_device *pd)
if (!IS_ERR_OR_NULL(drv_data->rstc)) if (!IS_ERR_OR_NULL(drv_data->rstc))
reset_control_assert(drv_data->rstc); reset_control_assert(drv_data->rstc);
exit_clk: exit_clk:
#if defined(CONFIG_HAVE_CLK)
/* Not all platforms have a clk */ /* Not all platforms have a clk */
if (!IS_ERR(drv_data->clk)) if (!IS_ERR(drv_data->clk))
clk_disable_unprepare(drv_data->clk); clk_disable_unprepare(drv_data->clk);
#endif
return rc; return rc;
} }
...@@ -981,11 +970,9 @@ mv64xxx_i2c_remove(struct platform_device *dev) ...@@ -981,11 +970,9 @@ mv64xxx_i2c_remove(struct platform_device *dev)
free_irq(drv_data->irq, drv_data); free_irq(drv_data->irq, drv_data);
if (!IS_ERR_OR_NULL(drv_data->rstc)) if (!IS_ERR_OR_NULL(drv_data->rstc))
reset_control_assert(drv_data->rstc); reset_control_assert(drv_data->rstc);
#if defined(CONFIG_HAVE_CLK)
/* Not all platforms have a clk */ /* Not all platforms have a clk */
if (!IS_ERR(drv_data->clk)) if (!IS_ERR(drv_data->clk))
clk_disable_unprepare(drv_data->clk); clk_disable_unprepare(drv_data->clk);
#endif
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment