On Thu, Apr 17, 2014 at 02:18:58AM +0800, Chew Chiau Ee wrote: > From: Alan Cox > > Not all systems enumerate the PWM devices via ACPI. They can also be exposed > via the PCI interface. > > Signed-off-by: Alan Cox > Signed-off-by: Chew, Chiau Ee > --- > drivers/pwm/pwm-lpss.c | 159 ++++++++++++++++++++++++++++++++++++++--------- > 1 files changed, 128 insertions(+), 31 deletions(-) > > diff --git a/drivers/pwm/pwm-lpss.c b/drivers/pwm/pwm-lpss.c > index 449e372..aa8af08 100644 > --- a/drivers/pwm/pwm-lpss.c > +++ b/drivers/pwm/pwm-lpss.c > @@ -6,6 +6,7 @@ > * Author: Chew Kean Ho > * Author: Chang Rebecca Swee Fun > * Author: Chew Chiau Ee > + * Author: Alan Cox > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License version 2 as > @@ -19,6 +20,9 @@ > #include > #include > #include > +#include > + > +static int pci_drv, plat_drv; /* So we know which drivers registered */ I think that rather than having everything in a single file, perhaps a better approach would be to keep pwm-lpss.c as a common module and then have separate drivers for ACPI (pwm-lpss-acpi) and PCI (pwm-lpss-pci). That way you don't have to keep track of which driver was successfully registered. Would that work? > +static const struct pwm_lpss_boardinfo byt_info = { What does byt_ stand for? > -static int pwm_lpss_probe(struct platform_device *pdev) > +static struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, > + struct resource *r, struct pwm_lpss_boardinfo *info) Indentation is odd here. Please align arguments one subsequent lines with those of the first. > -static struct platform_driver pwm_lpss_driver = { > +static int pwm_lpss_probe_pci(struct pci_dev *pdev, > + const struct pci_device_id *id) > +{ > + struct pwm_lpss_boardinfo *info; I think this should be const to mirror the type of the byt_info variable. > + struct pwm_lpss_chip *lpwm; > + int err; > + > + err = pci_enable_device(pdev); > + if (err < 0) > + return err; > + > + info = (struct pwm_lpss_boardinfo *)id->driver_data; There's an extraneous space between '=' and '('. Thierry