On Mon, Feb 26, 2018 at 3:05 PM, Richard Fitzgerald <rf@xxxxxxxxxxxxxxxxxxxxx> wrote: > This adds the generic core support for Cirrus Logic "Madera" class codecs. > These are complex audio codec SoCs with a variety of digital and analogue > I/O, onboard audio processing and DSPs, and other features. > > These codecs are all based off a common set of hardware IP so can be > supported by a core of common code (with a few minor device-to-device > variations). > + * > + * 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; version 2. This is redundant. > +static void madera_enable_hard_reset(struct madera *madera) > +{ > + if (madera->reset_gpio) if (!...) return > + gpiod_set_value_cansleep(madera->reset_gpio, 0); > +} > + > +static void madera_disable_hard_reset(struct madera *madera) > +{ > + if (madera->reset_gpio) { Ditto. > + gpiod_set_value_cansleep(madera->reset_gpio, 1); > + usleep_range(1000, 2000); > + } > +} > + > +#ifdef CONFIG_PM __maybe_unused > +const struct dev_pm_ops madera_pm_ops = { > + SET_RUNTIME_PM_OPS(madera_runtime_suspend, > + madera_runtime_resume, > + NULL) > +}; There is a macro helper for this I believe. > +const struct of_device_id madera_of_match[] = { > + { .compatible = "cirrus,cs47l35", .data = (void *)CS47L35 }, > + { .compatible = "cirrus,cs47l85", .data = (void *)CS47L85 }, > + { .compatible = "cirrus,cs47l90", .data = (void *)CS47L90 }, > + { .compatible = "cirrus,cs47l91", .data = (void *)CS47L91 }, > + { .compatible = "cirrus,wm1840", .data = (void *)WM1840 }, > + {}, No comma. > +}; > + ret = devm_gpio_request_one(madera->dev, > + madera->pdata.reset, > + GPIOF_DIR_OUT | GPIOF_INIT_LOW, > + "madera reset"); > + if (!ret) > + madera->reset_gpio = gpio_to_desc(madera->pdata.reset); Why? What's wrong with descriptors? > + dev_set_drvdata(madera->dev, madera); ... > + if (dev_get_platdata(madera->dev)) What this dance for? > + ret = mfd_add_devices(madera->dev, PLATFORM_DEVID_NONE, > + mfd_devs, n_devs, > + NULL, 0, NULL); devm_? > + if (i2c->dev.of_node) { > + of_id = of_match_device(madera_of_match, &i2c->dev); > + if (of_id) > + type = (unsigned long)of_id->data; > + } else { > + type = id->driver_data; > + } > + if (spi->dev.of_node) { > + of_id = of_match_device(madera_of_match, &spi->dev); > + if (of_id) > + type = (unsigned long)of_id->data; There is a helper to get match data. > + } else { > + type = id->driver_data; > + } > +struct madera_irqchip_pdata; > +struct madera_codec_pdata; Why do you need platform data in new code? > + * @reset: GPIO controlling /RESET (0 = none) Shouldn't be descriptor? -- With Best Regards, Andy Shevchenko -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html