static void cmpc_accel_handler(acpi_handle handle, u32 event, void *data)
{
- struct acpi_device *dev = data;
+ struct device *dev = data;
if (event == 0x81) {
unsigned char x, y, z;
acpi_status status;
- status = cmpc_get_accel(dev->handle, &x, &y, &z);
+ status = cmpc_get_accel(ACPI_HANDLE(dev), &x, &y, &z);
if (ACPI_SUCCESS(status)) {
- struct input_dev *inputdev = dev_get_drvdata(&dev->dev);
+ struct input_dev *inputdev = dev_get_drvdata(dev);
input_report_abs(inputdev, ABS_X, x);
input_report_abs(inputdev, ABS_Y, y);
static int cmpc_accel_open(struct input_dev *input)
{
- struct acpi_device *acpi;
-
- acpi = to_acpi_device(input->dev.parent);
- if (ACPI_SUCCESS(cmpc_start_accel(acpi->handle)))
+ if (ACPI_SUCCESS(cmpc_start_accel(ACPI_HANDLE(input->dev.parent))))
return 0;
return -EIO;
}
static void cmpc_accel_close(struct input_dev *input)
{
- struct acpi_device *acpi;
-
- acpi = to_acpi_device(input->dev.parent);
- cmpc_stop_accel(acpi->handle);
+ cmpc_stop_accel(ACPI_HANDLE(input->dev.parent));
}
static void cmpc_accel_idev_init(struct input_dev *inputdev)
inputdev->close = cmpc_accel_close;
}
-static int cmpc_accel_add(struct acpi_device *acpi)
+static int cmpc_accel_probe(struct platform_device *pdev)
{
int error;
struct input_dev *inputdev;
struct cmpc_accel *accel;
+ struct acpi_device *acpi;
- accel = devm_kzalloc(&acpi->dev, sizeof(*accel), GFP_KERNEL);
+ acpi = ACPI_COMPANION(&pdev->dev);
+ if (!acpi)
+ return -ENODEV;
+
+ accel = devm_kzalloc(&pdev->dev, sizeof(*accel), GFP_KERNEL);
if (!accel)
return -ENOMEM;
- error = cmpc_add_notify_device(&acpi->dev, "cmpc_accel", cmpc_accel_idev_init);
+ error = cmpc_add_notify_device(&pdev->dev, "cmpc_accel", cmpc_accel_idev_init);
if (error)
return error;
- inputdev = dev_get_drvdata(&acpi->dev);
+ inputdev = dev_get_drvdata(&pdev->dev);
+ dev_set_drvdata(&acpi->dev, inputdev);
accel->sensitivity = CMPC_ACCEL_SENSITIVITY_DEFAULT;
cmpc_accel_set_sensitivity(acpi->handle, accel->sensitivity);
goto failed_file;
error = acpi_dev_install_notify_handler(acpi, ACPI_DEVICE_NOTIFY,
- cmpc_accel_handler, acpi);
+ cmpc_accel_handler, &pdev->dev);
if (error)
goto failed_notify_handler;
failed_notify_handler:
device_remove_file(&acpi->dev, &cmpc_accel_sensitivity_attr);
failed_file:
- cmpc_remove_notify_device(&acpi->dev);
+ dev_set_drvdata(&acpi->dev, NULL);
+ cmpc_remove_notify_device(&pdev->dev);
return error;
}
-static void cmpc_accel_remove(struct acpi_device *acpi)
+static void cmpc_accel_remove(struct platform_device *pdev)
{
+ struct acpi_device *acpi = ACPI_COMPANION(&pdev->dev);
+
acpi_dev_remove_notify_handler(acpi, ACPI_DEVICE_NOTIFY,
cmpc_accel_handler);
device_remove_file(&acpi->dev, &cmpc_accel_sensitivity_attr);
- cmpc_remove_notify_device(&acpi->dev);
+ dev_set_drvdata(&acpi->dev, NULL);
+ cmpc_remove_notify_device(&pdev->dev);
}
static const struct acpi_device_id cmpc_accel_device_ids[] = {
{"", 0}
};
-static struct acpi_driver cmpc_accel_acpi_driver = {
- .name = "cmpc_accel",
- .class = "cmpc_accel",
- .ids = cmpc_accel_device_ids,
- .ops = {
- .add = cmpc_accel_add,
- .remove = cmpc_accel_remove,
- }
+static struct platform_driver cmpc_accel_acpi_driver = {
+ .probe = cmpc_accel_probe,
+ .remove = cmpc_accel_remove,
+ .driver = {
+ .name = "cmpc_accel",
+ .acpi_match_table = cmpc_accel_device_ids,
+ },
};
if (r)
goto failed_tablet;
- r = acpi_bus_register_driver(&cmpc_accel_acpi_driver);
+ r = platform_driver_register(&cmpc_accel_acpi_driver);
if (r)
goto failed_accel;
return r;
failed_accel_v4:
- acpi_bus_unregister_driver(&cmpc_accel_acpi_driver);
+ platform_driver_unregister(&cmpc_accel_acpi_driver);
failed_accel:
acpi_bus_unregister_driver(&cmpc_tablet_acpi_driver);
static void cmpc_exit(void)
{
platform_driver_unregister(&cmpc_accel_acpi_driver_v4);
- acpi_bus_unregister_driver(&cmpc_accel_acpi_driver);
+ platform_driver_unregister(&cmpc_accel_acpi_driver);
acpi_bus_unregister_driver(&cmpc_tablet_acpi_driver);
acpi_bus_unregister_driver(&cmpc_ipml_acpi_driver);
acpi_bus_unregister_driver(&cmpc_keys_acpi_driver);