#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci_ids.h>
+#include <linux/platform_device.h>
#include <linux/types.h>
static const struct acpi_device_id acer_wireless_acpi_ids[] = {
static void acer_wireless_notify(acpi_handle handle, u32 event, void *data)
{
- struct acpi_device *adev = data;
- struct input_dev *idev = acpi_driver_data(adev);
+ struct device *dev = data;
+ struct input_dev *idev = dev_get_drvdata(dev);
- dev_dbg(&adev->dev, "event=%#x\n", event);
+ dev_dbg(dev, "event=%#x\n", event);
if (event != 0x80) {
- dev_notice(&adev->dev, "Unknown SMKB event: %#x\n", event);
+ dev_notice(dev, "Unknown SMKB event: %#x\n", event);
return;
}
input_report_key(idev, KEY_RFKILL, 1);
input_sync(idev);
}
-static int acer_wireless_add(struct acpi_device *adev)
+static int acer_wireless_probe(struct platform_device *pdev)
{
struct input_dev *idev;
int ret;
- idev = devm_input_allocate_device(&adev->dev);
+ idev = devm_input_allocate_device(&pdev->dev);
if (!idev)
return -ENOMEM;
- adev->driver_data = idev;
+ platform_set_drvdata(pdev, idev);
idev->name = "Acer Wireless Radio Control";
idev->phys = "acer-wireless/input0";
idev->id.bustype = BUS_HOST;
if (ret)
return ret;
- return acpi_dev_install_notify_handler(adev, ACPI_DEVICE_NOTIFY,
- acer_wireless_notify, adev);
+ return acpi_dev_install_notify_handler(ACPI_COMPANION(&pdev->dev),
+ ACPI_DEVICE_NOTIFY,
+ acer_wireless_notify,
+ &pdev->dev);
}
-static void acer_wireless_remove(struct acpi_device *adev)
+static void acer_wireless_remove(struct platform_device *pdev)
{
- acpi_dev_remove_notify_handler(adev, ACPI_DEVICE_NOTIFY,
+ acpi_dev_remove_notify_handler(ACPI_COMPANION(&pdev->dev),
+ ACPI_DEVICE_NOTIFY,
acer_wireless_notify);
}
-static struct acpi_driver acer_wireless_driver = {
- .name = "Acer Wireless Radio Control Driver",
- .class = "hotkey",
- .ids = acer_wireless_acpi_ids,
- .ops = {
- .add = acer_wireless_add,
- .remove = acer_wireless_remove,
+static struct platform_driver acer_wireless_driver = {
+ .probe = acer_wireless_probe,
+ .remove = acer_wireless_remove,
+ .driver = {
+ .name = "Acer Wireless Radio Control Driver",
+ .acpi_match_table = acer_wireless_acpi_ids,
},
};
-module_acpi_driver(acer_wireless_driver);
+module_platform_driver(acer_wireless_driver);
MODULE_DESCRIPTION("Acer Wireless Radio Control Driver");
MODULE_AUTHOR("Chris Chiu <chiu@gmail.com>");