@@ -20,7 +20,6 @@
static int pwm_lpss_probe_pci(struct pci_dev *pdev,
const struct pci_device_id *id)
{
- const struct pwm_lpss_boardinfo *info;
struct pwm_lpss_chip *lpwm;
int err;
@@ -28,8 +27,7 @@ static int pwm_lpss_probe_pci(struct pci_dev *pdev,
if (err < 0)
return err;
- info = (struct pwm_lpss_boardinfo *)id->driver_data;
- lpwm = pwm_lpss_probe(&pdev->dev, &pdev->resource[0], info);
+ lpwm = pwm_lpss_probe(&pdev->dev, &pdev->resource[0], id->driver_data);
if (IS_ERR(lpwm))
return PTR_ERR(lpwm);
@@ -73,14 +71,14 @@ static const struct dev_pm_ops pwm_lpss_pci_pm = {
};
static const struct pci_device_id pwm_lpss_pci_ids[] = {
- { PCI_VDEVICE(INTEL, 0x0ac8), (unsigned long)&pwm_lpss_bxt_info},
- { PCI_VDEVICE(INTEL, 0x0f08), (unsigned long)&pwm_lpss_byt_info},
- { PCI_VDEVICE(INTEL, 0x0f09), (unsigned long)&pwm_lpss_byt_info},
- { PCI_VDEVICE(INTEL, 0x11a5), (unsigned long)&pwm_lpss_bxt_info},
- { PCI_VDEVICE(INTEL, 0x1ac8), (unsigned long)&pwm_lpss_bxt_info},
- { PCI_VDEVICE(INTEL, 0x2288), (unsigned long)&pwm_lpss_bsw_info},
- { PCI_VDEVICE(INTEL, 0x2289), (unsigned long)&pwm_lpss_bsw_info},
- { PCI_VDEVICE(INTEL, 0x5ac8), (unsigned long)&pwm_lpss_bxt_info},
+ { PCI_VDEVICE(INTEL, 0x0ac8), PWM_LPSS_BXT },
+ { PCI_VDEVICE(INTEL, 0x0f08), PWM_LPSS_BYT },
+ { PCI_VDEVICE(INTEL, 0x0f09), PWM_LPSS_BYT },
+ { PCI_VDEVICE(INTEL, 0x11a5), PWM_LPSS_BXT },
+ { PCI_VDEVICE(INTEL, 0x1ac8), PWM_LPSS_BXT },
+ { PCI_VDEVICE(INTEL, 0x2288), PWM_LPSS_BSW },
+ { PCI_VDEVICE(INTEL, 0x2289), PWM_LPSS_BSW },
+ { PCI_VDEVICE(INTEL, 0x5ac8), PWM_LPSS_BXT },
{ },
};
MODULE_DEVICE_TABLE(pci, pwm_lpss_pci_ids);
@@ -20,7 +20,6 @@
static int pwm_lpss_probe_platform(struct platform_device *pdev)
{
- const struct pwm_lpss_boardinfo *info;
const struct acpi_device_id *id;
struct pwm_lpss_chip *lpwm;
struct resource *r;
@@ -29,10 +28,9 @@ static int pwm_lpss_probe_platform(struct platform_device *pdev)
if (!id)
return -ENODEV;
- info = (const struct pwm_lpss_boardinfo *)id->driver_data;
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- lpwm = pwm_lpss_probe(&pdev->dev, r, info);
+ lpwm = pwm_lpss_probe(&pdev->dev, r, id->driver_data);
if (IS_ERR(lpwm))
return PTR_ERR(lpwm);
@@ -53,9 +51,9 @@ static int pwm_lpss_remove_platform(struct platform_device *pdev)
}
static const struct acpi_device_id pwm_lpss_acpi_match[] = {
- { "80860F09", (unsigned long)&pwm_lpss_byt_info },
- { "80862288", (unsigned long)&pwm_lpss_bsw_info },
- { "80865AC8", (unsigned long)&pwm_lpss_bxt_info },
+ { "80860F09", PWM_LPSS_BYT },
+ { "80862288", PWM_LPSS_BSW },
+ { "80865AC8", PWM_LPSS_BXT },
{ },
};
MODULE_DEVICE_TABLE(acpi, pwm_lpss_acpi_match);
@@ -37,29 +37,32 @@ struct pwm_lpss_chip {
const struct pwm_lpss_boardinfo *info;
};
-/* BayTrail */
-const struct pwm_lpss_boardinfo pwm_lpss_byt_info = {
- .clk_rate = 25000000,
- .npwm = 1,
- .base_unit_bits = 16,
+struct pwm_lpss_boardinfo {
+ unsigned long clk_rate;
+ unsigned int npwm;
+ unsigned long base_unit_bits;
};
-EXPORT_SYMBOL_GPL(pwm_lpss_byt_info);
-/* Braswell */
-const struct pwm_lpss_boardinfo pwm_lpss_bsw_info = {
- .clk_rate = 19200000,
- .npwm = 1,
- .base_unit_bits = 16,
+static const struct pwm_lpss_boardinfo pwm_lpss_types[] = {
+ /* Baytrail */
+ [PWM_LPSS_BYT] = {
+ .clk_rate = 25000000,
+ .npwm = 1,
+ .base_unit_bits = 16,
+ },
+ /* Braswell */
+ [PWM_LPSS_BSW] = {
+ .clk_rate = 19200000,
+ .npwm = 1,
+ .base_unit_bits = 16,
+ },
+ /* Broxton */
+ [PWM_LPSS_BXT] = {
+ .clk_rate = 19200000,
+ .npwm = 4,
+ .base_unit_bits = 22,
+ },
};
-EXPORT_SYMBOL_GPL(pwm_lpss_bsw_info);
-
-/* Broxton */
-const struct pwm_lpss_boardinfo pwm_lpss_bxt_info = {
- .clk_rate = 19200000,
- .npwm = 4,
- .base_unit_bits = 22,
-};
-EXPORT_SYMBOL_GPL(pwm_lpss_bxt_info);
static inline struct pwm_lpss_chip *to_lpwm(struct pwm_chip *chip)
{
@@ -160,7 +163,7 @@ static const struct pwm_ops pwm_lpss_ops = {
};
struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r,
- const struct pwm_lpss_boardinfo *info)
+ enum pwm_lpss_type type)
{
struct pwm_lpss_chip *lpwm;
unsigned long c;
@@ -174,7 +177,7 @@ struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r,
if (IS_ERR(lpwm->regs))
return ERR_CAST(lpwm->regs);
- lpwm->info = info;
+ lpwm->info = &pwm_lpss_types[type];
c = lpwm->info->clk_rate;
if (!c)
@@ -183,7 +186,7 @@ struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r,
lpwm->chip.dev = dev;
lpwm->chip.ops = &pwm_lpss_ops;
lpwm->chip.base = -1;
- lpwm->chip.npwm = info->npwm;
+ lpwm->chip.npwm = lpwm->info->npwm;
ret = pwmchip_add(&lpwm->chip);
if (ret) {
@@ -18,18 +18,14 @@
struct pwm_lpss_chip;
-struct pwm_lpss_boardinfo {
- unsigned long clk_rate;
- unsigned int npwm;
- unsigned long base_unit_bits;
+enum pwm_lpss_type {
+ PWM_LPSS_BYT,
+ PWM_LPSS_BSW,
+ PWM_LPSS_BXT,
};
-extern const struct pwm_lpss_boardinfo pwm_lpss_byt_info;
-extern const struct pwm_lpss_boardinfo pwm_lpss_bsw_info;
-extern const struct pwm_lpss_boardinfo pwm_lpss_bxt_info;
-
struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r,
- const struct pwm_lpss_boardinfo *info);
+ enum pwm_lpss_type type);
int pwm_lpss_remove(struct pwm_lpss_chip *lpwm);
#endif /* __PWM_LPSS_H */