Commit 0344e616 authored by Enrico Weigelt's avatar Enrico Weigelt Committed by Jacek Anaszewski

leds: apu: drop superseeded apu2/3 led support

This driver only supports gpio-attached LEDs on apu1/2/3 boards,
but neither gpio's themselves, nor other gpio-attached devices
(eg. front button).

For apu2+ a newer, more complete driver exists, based on a generic
driver for the AMD SOCs gpio-controller, supporting LEDs as well
other devices. Therefore these boards don't need legacy support
from this driver anymore.

Both drivers claim the same device, so only one driver may exist
in a system, putting distros in the position to decide between
either apu2+ keys or apu1 led support.

Therefore drop the apu2+ led support from the old driver, solve
the conflict and reduce unnecessary code.
Signed-off-by: default avatarEnrico Weigelt <info@metux.net>
Acked-by: default avatarPavel Machek <pavel@ucw.cz>
Signed-off-by: default avatarJacek Anaszewski <jacek.anaszewski@gmail.com>
parent 967ea03c
...@@ -74,9 +74,12 @@ config LEDS_APU ...@@ -74,9 +74,12 @@ config LEDS_APU
depends on LEDS_CLASS depends on LEDS_CLASS
depends on X86 && DMI depends on X86 && DMI
help help
This driver makes the PC Engines APU/APU2/APU3 front panel LEDs This driver makes the PC Engines APU1 front panel LEDs
accessible from userspace programs through the LED subsystem. accessible from userspace programs through the LED subsystem.
If you're looking for APU2/3, use the pcengines-apu2 driver.
(symbol CONFIG_PCENGINES_APU2)
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called leds-apu. module will be called leds-apu.
......
...@@ -47,12 +47,6 @@ ...@@ -47,12 +47,6 @@
#define APU1_NUM_GPIO 3 #define APU1_NUM_GPIO 3
#define APU1_IOSIZE sizeof(u8) #define APU1_IOSIZE sizeof(u8)
#define APU2_FCH_ACPI_MMIO_BASE 0xFED80000
#define APU2_FCH_GPIO_BASE (APU2_FCH_ACPI_MMIO_BASE + 0x1500)
#define APU2_GPIO_BIT_WRITE 22
#define APU2_APU2_NUM_GPIO 4
#define APU2_IOSIZE sizeof(u32)
/* LED access parameters */ /* LED access parameters */
struct apu_param { struct apu_param {
void __iomem *addr; /* for ioread/iowrite */ void __iomem *addr; /* for ioread/iowrite */
...@@ -75,7 +69,6 @@ struct apu_led_profile { ...@@ -75,7 +69,6 @@ struct apu_led_profile {
/* Supported platform types */ /* Supported platform types */
enum apu_led_platform_types { enum apu_led_platform_types {
APU1_LED_PLATFORM, APU1_LED_PLATFORM,
APU2_LED_PLATFORM,
}; };
struct apu_led_pdata { struct apu_led_pdata {
...@@ -96,19 +89,6 @@ static const struct apu_led_profile apu1_led_profile[] = { ...@@ -96,19 +89,6 @@ static const struct apu_led_profile apu1_led_profile[] = {
{ "apu:green:3", LED_OFF, APU1_FCH_GPIO_BASE + 2 * APU1_IOSIZE }, { "apu:green:3", LED_OFF, APU1_FCH_GPIO_BASE + 2 * APU1_IOSIZE },
}; };
static const struct apu_led_profile apu2_led_profile[] = {
{ "apu2:green:1", LED_ON, APU2_FCH_GPIO_BASE + 68 * APU2_IOSIZE },
{ "apu2:green:2", LED_OFF, APU2_FCH_GPIO_BASE + 69 * APU2_IOSIZE },
{ "apu2:green:3", LED_OFF, APU2_FCH_GPIO_BASE + 70 * APU2_IOSIZE },
};
/* Same as apu2_led_profile, but with "3" in the LED names. */
static const struct apu_led_profile apu3_led_profile[] = {
{ "apu3:green:1", LED_ON, APU2_FCH_GPIO_BASE + 68 * APU2_IOSIZE },
{ "apu3:green:2", LED_OFF, APU2_FCH_GPIO_BASE + 69 * APU2_IOSIZE },
{ "apu3:green:3", LED_OFF, APU2_FCH_GPIO_BASE + 70 * APU2_IOSIZE },
};
static const struct dmi_system_id apu_led_dmi_table[] __initconst = { static const struct dmi_system_id apu_led_dmi_table[] __initconst = {
{ {
.ident = "apu", .ident = "apu",
...@@ -117,54 +97,6 @@ static const struct dmi_system_id apu_led_dmi_table[] __initconst = { ...@@ -117,54 +97,6 @@ static const struct dmi_system_id apu_led_dmi_table[] __initconst = {
DMI_MATCH(DMI_PRODUCT_NAME, "APU") DMI_MATCH(DMI_PRODUCT_NAME, "APU")
} }
}, },
/* PC Engines APU2 with "Legacy" bios < 4.0.8 */
{
.ident = "apu2",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "PC Engines"),
DMI_MATCH(DMI_BOARD_NAME, "APU2")
}
},
/* PC Engines APU2 with "Legacy" bios >= 4.0.8 */
{
.ident = "apu2",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "PC Engines"),
DMI_MATCH(DMI_BOARD_NAME, "apu2")
}
},
/* PC Engines APU2 with "Mainline" bios */
{
.ident = "apu2",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "PC Engines"),
DMI_MATCH(DMI_BOARD_NAME, "PC Engines apu2")
}
},
/* PC Engines APU3 with "Legacy" bios < 4.0.8 */
{
.ident = "apu3",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "PC Engines"),
DMI_MATCH(DMI_BOARD_NAME, "APU3")
}
},
/* PC Engines APU3 with "Legacy" bios >= 4.0.8 */
{
.ident = "apu3",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "PC Engines"),
DMI_MATCH(DMI_BOARD_NAME, "apu3")
}
},
/* PC Engines APU2 with "Mainline" bios */
{
.ident = "apu3",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "PC Engines"),
DMI_MATCH(DMI_BOARD_NAME, "PC Engines apu3")
}
},
{} {}
}; };
MODULE_DEVICE_TABLE(dmi, apu_led_dmi_table); MODULE_DEVICE_TABLE(dmi, apu_led_dmi_table);
...@@ -178,25 +110,6 @@ static void apu1_led_brightness_set(struct led_classdev *led, enum led_brightnes ...@@ -178,25 +110,6 @@ static void apu1_led_brightness_set(struct led_classdev *led, enum led_brightnes
spin_unlock(&apu_led->lock); spin_unlock(&apu_led->lock);
} }
static void apu2_led_brightness_set(struct led_classdev *led, enum led_brightness value)
{
struct apu_led_priv *pled = cdev_to_priv(led);
u32 value_new;
spin_lock(&apu_led->lock);
value_new = ioread32(pled->param.addr);
if (value)
value_new &= ~BIT(APU2_GPIO_BIT_WRITE);
else
value_new |= BIT(APU2_GPIO_BIT_WRITE);
iowrite32(value_new, pled->param.addr);
spin_unlock(&apu_led->lock);
}
static int apu_led_config(struct device *dev, struct apu_led_pdata *apuld) static int apu_led_config(struct device *dev, struct apu_led_pdata *apuld)
{ {
int i; int i;
...@@ -219,8 +132,6 @@ static int apu_led_config(struct device *dev, struct apu_led_pdata *apuld) ...@@ -219,8 +132,6 @@ static int apu_led_config(struct device *dev, struct apu_led_pdata *apuld)
led_cdev->flags = LED_CORE_SUSPENDRESUME; led_cdev->flags = LED_CORE_SUSPENDRESUME;
if (apu_led->platform == APU1_LED_PLATFORM) if (apu_led->platform == APU1_LED_PLATFORM)
led_cdev->brightness_set = apu1_led_brightness_set; led_cdev->brightness_set = apu1_led_brightness_set;
else if (apu_led->platform == APU2_LED_PLATFORM)
led_cdev->brightness_set = apu2_led_brightness_set;
pled->param.addr = devm_ioremap(dev, pled->param.addr = devm_ioremap(dev,
apu_led->profile[i].offset, apu_led->iosize); apu_led->profile[i].offset, apu_led->iosize);
...@@ -254,27 +165,10 @@ static int __init apu_led_probe(struct platform_device *pdev) ...@@ -254,27 +165,10 @@ static int __init apu_led_probe(struct platform_device *pdev)
apu_led->pdev = pdev; apu_led->pdev = pdev;
if (dmi_match(DMI_PRODUCT_NAME, "APU")) {
apu_led->profile = apu1_led_profile; apu_led->profile = apu1_led_profile;
apu_led->platform = APU1_LED_PLATFORM; apu_led->platform = APU1_LED_PLATFORM;
apu_led->num_led_instances = ARRAY_SIZE(apu1_led_profile); apu_led->num_led_instances = ARRAY_SIZE(apu1_led_profile);
apu_led->iosize = APU1_IOSIZE; apu_led->iosize = APU1_IOSIZE;
} else if (dmi_match(DMI_BOARD_NAME, "APU2") ||
dmi_match(DMI_BOARD_NAME, "apu2") ||
dmi_match(DMI_BOARD_NAME, "PC Engines apu2")) {
apu_led->profile = apu2_led_profile;
apu_led->platform = APU2_LED_PLATFORM;
apu_led->num_led_instances = ARRAY_SIZE(apu2_led_profile);
apu_led->iosize = APU2_IOSIZE;
} else if (dmi_match(DMI_BOARD_NAME, "APU3") ||
dmi_match(DMI_BOARD_NAME, "apu3") ||
dmi_match(DMI_BOARD_NAME, "PC Engines apu3")) {
apu_led->profile = apu3_led_profile;
/* Otherwise identical to APU2. */
apu_led->platform = APU2_LED_PLATFORM;
apu_led->num_led_instances = ARRAY_SIZE(apu3_led_profile);
apu_led->iosize = APU2_IOSIZE;
}
spin_lock_init(&apu_led->lock); spin_lock_init(&apu_led->lock);
return apu_led_config(&pdev->dev, apu_led); return apu_led_config(&pdev->dev, apu_led);
...@@ -295,13 +189,7 @@ static int __init apu_led_init(void) ...@@ -295,13 +189,7 @@ static int __init apu_led_init(void)
pr_err("No PC Engines board detected\n"); pr_err("No PC Engines board detected\n");
return -ENODEV; return -ENODEV;
} }
if (!(dmi_match(DMI_PRODUCT_NAME, "APU") || if (!(dmi_match(DMI_PRODUCT_NAME, "APU"))) {
dmi_match(DMI_PRODUCT_NAME, "APU2") ||
dmi_match(DMI_PRODUCT_NAME, "apu2") ||
dmi_match(DMI_PRODUCT_NAME, "PC Engines apu2") ||
dmi_match(DMI_PRODUCT_NAME, "APU3") ||
dmi_match(DMI_PRODUCT_NAME, "apu3") ||
dmi_match(DMI_PRODUCT_NAME, "PC Engines apu3"))) {
pr_err("Unknown PC Engines board: %s\n", pr_err("Unknown PC Engines board: %s\n",
dmi_get_system_info(DMI_PRODUCT_NAME)); dmi_get_system_info(DMI_PRODUCT_NAME));
return -ENODEV; return -ENODEV;
...@@ -337,6 +225,6 @@ module_init(apu_led_init); ...@@ -337,6 +225,6 @@ module_init(apu_led_init);
module_exit(apu_led_exit); module_exit(apu_led_exit);
MODULE_AUTHOR("Alan Mizrahi"); MODULE_AUTHOR("Alan Mizrahi");
MODULE_DESCRIPTION("PC Engines APU family LED driver"); MODULE_DESCRIPTION("PC Engines APU1 front LED driver");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:leds_apu"); MODULE_ALIAS("platform:leds_apu");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment