aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc
diff options
context:
space:
mode:
authorSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>2013-10-01 12:22:00 -0400
committerJonathan Cameron <jic23@kernel.org>2013-10-01 17:06:15 -0400
commit476b9547e872c709c07a45bd47301ce7236f3dc1 (patch)
treed5e3bc0c92e9653becc6ff794c229abda6bdd6af /drivers/rtc
parent0a440ee9b6a916322613de0c23080fb6d0fd6e26 (diff)
HID RTC: Open sensor hub open close
Open sensor hub when module is loaded and close when module is removed. This helps saving power by opening HID transport only when there is an user. Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> Acked-by: Alessandro Zummo <a.zummo@towertech.it> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/rtc')
-rw-r--r--drivers/rtc/rtc-hid-sensor-time.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/rtc/rtc-hid-sensor-time.c b/drivers/rtc/rtc-hid-sensor-time.c
index 4e2a81854f51..45560ffb038d 100644
--- a/drivers/rtc/rtc-hid-sensor-time.c
+++ b/drivers/rtc/rtc-hid-sensor-time.c
@@ -275,6 +275,12 @@ static int hid_time_probe(struct platform_device *pdev)
275 return ret; 275 return ret;
276 } 276 }
277 277
278 ret = sensor_hub_device_open(hsdev);
279 if (ret) {
280 dev_err(&pdev->dev, "failed to open sensor hub device!\n");
281 goto err_open;
282 }
283
278 time_state->rtc = devm_rtc_device_register(&pdev->dev, 284 time_state->rtc = devm_rtc_device_register(&pdev->dev,
279 "hid-sensor-time", &hid_time_rtc_ops, 285 "hid-sensor-time", &hid_time_rtc_ops,
280 THIS_MODULE); 286 THIS_MODULE);
@@ -282,17 +288,24 @@ static int hid_time_probe(struct platform_device *pdev)
282 if (IS_ERR_OR_NULL(time_state->rtc)) { 288 if (IS_ERR_OR_NULL(time_state->rtc)) {
283 ret = time_state->rtc ? PTR_ERR(time_state->rtc) : -ENODEV; 289 ret = time_state->rtc ? PTR_ERR(time_state->rtc) : -ENODEV;
284 time_state->rtc = NULL; 290 time_state->rtc = NULL;
285 sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_TIME);
286 dev_err(&pdev->dev, "rtc device register failed!\n"); 291 dev_err(&pdev->dev, "rtc device register failed!\n");
292 goto err_rtc;
287 } 293 }
288 294
289 return ret; 295 return ret;
296
297err_rtc:
298 sensor_hub_device_close(hsdev);
299err_open:
300 sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_TIME);
301 return ret;
290} 302}
291 303
292static int hid_time_remove(struct platform_device *pdev) 304static int hid_time_remove(struct platform_device *pdev)
293{ 305{
294 struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data; 306 struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data;
295 307
308 sensor_hub_device_close(hsdev);
296 sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_TIME); 309 sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_TIME);
297 310
298 return 0; 311 return 0;