Merge git://www.linux-watchdog.org/linux-watchdog
[cascardo/linux.git] / drivers / rtc / rtc-hid-sensor-time.c
index 7273b01..4e2a818 100644 (file)
 #include <linux/iio/iio.h>
 #include <linux/rtc.h>
 
-/* Format: HID-SENSOR-usage_id_in_hex */
-/* Usage ID from spec for Time: 0x2000A0 */
-#define DRIVER_NAME "HID-SENSOR-2000a0" /* must be lowercase */
-
 enum hid_time_channel {
        CHANNEL_SCAN_INDEX_YEAR,
        CHANNEL_SCAN_INDEX_MONTH,
@@ -283,9 +279,11 @@ static int hid_time_probe(struct platform_device *pdev)
                                        "hid-sensor-time", &hid_time_rtc_ops,
                                        THIS_MODULE);
 
-       if (IS_ERR(time_state->rtc)) {
+       if (IS_ERR_OR_NULL(time_state->rtc)) {
+               ret = time_state->rtc ? PTR_ERR(time_state->rtc) : -ENODEV;
+               time_state->rtc = NULL;
+               sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_TIME);
                dev_err(&pdev->dev, "rtc device register failed!\n");
-               return PTR_ERR(time_state->rtc);
        }
 
        return ret;
@@ -300,9 +298,19 @@ static int hid_time_remove(struct platform_device *pdev)
        return 0;
 }
 
+static struct platform_device_id hid_time_ids[] = {
+       {
+               /* Format: HID-SENSOR-usage_id_in_hex_lowercase */
+               .name = "HID-SENSOR-2000a0",
+       },
+       { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(platform, hid_time_ids);
+
 static struct platform_driver hid_time_platform_driver = {
+       .id_table = hid_time_ids,
        .driver = {
-               .name   = DRIVER_NAME,
+               .name   = KBUILD_MODNAME,
                .owner  = THIS_MODULE,
        },
        .probe          = hid_time_probe,