Message ID | 1398945555-12928-1-git-send-email-wsa@the-dreams.de (mailing list archive) |
---|---|
State | RFC |
Headers | show |
Hi Wolfram, On Thu, May 1, 2014 at 1:59 PM, Wolfram Sang <wsa@the-dreams.de> wrote: > +static const struct of_device_id sh_mobile_i2c_dt_ids[] = { > + { .compatible = "renesas,rmobile-iic", .data = (void *)1 }, > + { .compatible = "renesas,iic-r8a7790", .data = (void *)2 }, > + { .compatible = "renesas,iic-r8a7791", .data = (void *)2 }, > + {}, > +}; > +MODULE_DEVICE_TABLE(of, sh_mobile_i2c_dt_ids); > + const struct of_device_id *match; > + > + match = of_match_device(sh_mobile_i2c_dt_ids, &dev->dev); > + pd->clks_per_count = match->data; Missing cast "(int)match->data"? Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds -- To unsubscribe from this list: send the line "unsubscribe linux-sh" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, May 01, 2014 at 03:26:15PM +0200, Geert Uytterhoeven wrote: > Hi Wolfram, > > On Thu, May 1, 2014 at 1:59 PM, Wolfram Sang <wsa@the-dreams.de> wrote: > > +static const struct of_device_id sh_mobile_i2c_dt_ids[] = { > > + { .compatible = "renesas,rmobile-iic", .data = (void *)1 }, > > + { .compatible = "renesas,iic-r8a7790", .data = (void *)2 }, > > + { .compatible = "renesas,iic-r8a7791", .data = (void *)2 }, > > + {}, > > +}; > > +MODULE_DEVICE_TABLE(of, sh_mobile_i2c_dt_ids); > > > + const struct of_device_id *match; > > + > > + match = of_match_device(sh_mobile_i2c_dt_ids, &dev->dev); > > + pd->clks_per_count = match->data; > > Missing cast "(int)match->data"? "This patch still needs some improvements, but already shows what I am aiming for." :)
diff --git a/drivers/i2c/busses/i2c-sh_mobile.c b/drivers/i2c/busses/i2c-sh_mobile.c index ddc9970fd724..d399b9a355b6 100644 --- a/drivers/i2c/busses/i2c-sh_mobile.c +++ b/drivers/i2c/busses/i2c-sh_mobile.c @@ -32,6 +32,7 @@ #include <linux/clk.h> #include <linux/io.h> #include <linux/slab.h> +#include <linux/of_device.h> #include <linux/i2c/i2c-sh_mobile.h> /* Transmit operation: */ @@ -611,6 +612,14 @@ static struct i2c_algorithm sh_mobile_i2c_algorithm = { .master_xfer = sh_mobile_i2c_xfer, }; +static const struct of_device_id sh_mobile_i2c_dt_ids[] = { + { .compatible = "renesas,rmobile-iic", .data = (void *)1 }, + { .compatible = "renesas,iic-r8a7790", .data = (void *)2 }, + { .compatible = "renesas,iic-r8a7791", .data = (void *)2 }, + {}, +}; +MODULE_DEVICE_TABLE(of, sh_mobile_i2c_dt_ids); + static int sh_mobile_i2c_hook_irqs(struct platform_device *dev) { struct resource *res; @@ -668,11 +677,18 @@ static int sh_mobile_i2c_probe(struct platform_device *dev) ret = of_property_read_u32(dev->dev.of_node, "clock-frequency", &bus_speed); pd->bus_speed = ret ? STANDARD_MODE : bus_speed; - if (pdata && pdata->bus_speed) - pd->bus_speed = pdata->bus_speed; - pd->clks_per_count = 1; - if (pdata && pdata->clks_per_count) - pd->clks_per_count = pdata->clks_per_count; + if (dev->dev.of_node) { + const struct of_device_id *match; + + match = of_match_device(sh_mobile_i2c_dt_ids, &dev->dev); + pd->clks_per_count = match->data; + } else { + if (pdata && pdata->bus_speed) + pd->bus_speed = pdata->bus_speed; + pd->clks_per_count = 1; + if (pdata && pdata->clks_per_count) + pd->clks_per_count = pdata->clks_per_count; + } /* The IIC blocks on SH-Mobile ARM processors * come with two new bits in ICIC. @@ -750,12 +766,6 @@ static const struct dev_pm_ops sh_mobile_i2c_dev_pm_ops = { .runtime_resume = sh_mobile_i2c_runtime_nop, }; -static const struct of_device_id sh_mobile_i2c_dt_ids[] = { - { .compatible = "renesas,rmobile-iic", }, - {}, -}; -MODULE_DEVICE_TABLE(of, sh_mobile_i2c_dt_ids); - static struct platform_driver sh_mobile_i2c_driver = { .driver = { .name = "i2c-sh_mobile",