Otherwise we can get the following if the fck alias is missing:
Unable to handle kernel paging request at virtual address
fffffffe
...
PC is at clk_get_rate+0x8/0x10
LR is at omap_i2c_probe+0x278/0x6ec
...
[<
c056eb08>] (clk_get_rate) from [<
c06f4f08>] (omap_i2c_probe+0x278/0x6ec)
[<
c06f4f08>] (omap_i2c_probe) from [<
c0610944>] (platform_drv_probe+0x50/0xb0)
[<
c0610944>] (platform_drv_probe) from [<
c060e900>] (driver_probe_device+0x264/0x2ec)
[<
c060e900>] (driver_probe_device) from [<
c060cda0>] (bus_for_each_drv+0x70/0xb8)
[<
c060cda0>] (bus_for_each_drv) from [<
c060e5b0>] (__device_attach+0xcc/0x13c)
[<
c060e5b0>] (__device_attach) from [<
c060db10>] (bus_probe_device+0x88/0x90)
[<
c060db10>] (bus_probe_device) from [<
c060df68>] (deferred_probe_work_func+0x4c/0x14c)
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
unsigned long fclk_rate = 12000000;
unsigned long internal_clk = 0;
struct clk *fclk;
+ int error;
if (omap->rev >= OMAP_I2C_REV_ON_3430_3530) {
/*
* do this bit unconditionally.
*/
fclk = clk_get(omap->dev, "fck");
+ if (IS_ERR(fclk)) {
+ error = PTR_ERR(fclk);
+ dev_err(omap->dev, "could not get fck: %i\n", error);
+
+ return error;
+ }
+
fclk_rate = clk_get_rate(fclk);
clk_put(fclk);
else
internal_clk = 4000;
fclk = clk_get(omap->dev, "fck");
+ if (IS_ERR(fclk)) {
+ error = PTR_ERR(fclk);
+ dev_err(omap->dev, "could not get fck: %i\n", error);
+
+ return error;
+ }
fclk_rate = clk_get_rate(fclk) / 1000;
clk_put(fclk);