Skip to content

Commit 5af6e08

Browse files
committed
Merge tag 'chrome-platform-v7.1' of git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux
Pull chrome platform updates from Tzung-Bi Shih: "Improvements: - Reduce transmission size by dropping unnecessary data in cros_ec_lightbar - Convert chromeos_privacy_screen, chromeos_tbmc, and wilco_ec/event from ACPI drivers to platform drivers Fixes: - Drop wakeup source on remove() in chromeos_tbmc Cleanups: - Simplify workqueue usage with devm in cros_usbpd_logger" * tag 'chrome-platform-v7.1' of git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux: platform/chrome: cros_usbpd_logger: Simplify with devm platform/chrome: wilco_ec: event: Convert to a platform driver platform/chrome: wilco_ec: event: Register ACPI notify handler platform/chrome: chromeos_tbmc: Convert to a platform driver platform/chrome: chromeos_tbmc: Register ACPI notify handler platform/chrome: chromeos_tbmc: Drop wakeup source on remove platform/chrome: Convert ChromeOS privacy-screen driver to platform platform/chrome: lightbar: Optimize command size
2 parents f82b61d + 168e4b2 commit 5af6e08

5 files changed

Lines changed: 107 additions & 83 deletions

File tree

drivers/platform/chrome/chromeos_privacy_screen.c

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
*/
1313

1414
#include <linux/acpi.h>
15+
#include <linux/platform_device.h>
1516
#include <drm/drm_privacy_screen_driver.h>
1617

1718
/*
@@ -32,11 +33,10 @@ chromeos_privacy_screen_get_hw_state(struct drm_privacy_screen
3233
*drm_privacy_screen)
3334
{
3435
union acpi_object *obj;
35-
acpi_handle handle;
3636
struct device *privacy_screen =
3737
drm_privacy_screen_get_drvdata(drm_privacy_screen);
38+
acpi_handle handle = ACPI_HANDLE(privacy_screen);
3839

39-
handle = acpi_device_handle(to_acpi_device(privacy_screen));
4040
obj = acpi_evaluate_dsm(handle, &chromeos_privacy_screen_dsm_guid,
4141
PRIV_SCRN_DSM_REVID,
4242
PRIV_SCRN_DSM_FN_GET_STATUS, NULL);
@@ -65,11 +65,9 @@ chromeos_privacy_screen_set_sw_state(struct drm_privacy_screen
6565
enum drm_privacy_screen_status state)
6666
{
6767
union acpi_object *obj = NULL;
68-
acpi_handle handle;
6968
struct device *privacy_screen =
7069
drm_privacy_screen_get_drvdata(drm_privacy_screen);
71-
72-
handle = acpi_device_handle(to_acpi_device(privacy_screen));
70+
acpi_handle handle = ACPI_HANDLE(privacy_screen);
7371

7472
if (state == PRIVACY_SCREEN_DISABLED) {
7573
obj = acpi_evaluate_dsm(handle,
@@ -104,30 +102,28 @@ static const struct drm_privacy_screen_ops chromeos_privacy_screen_ops = {
104102
.set_sw_state = chromeos_privacy_screen_set_sw_state,
105103
};
106104

107-
static int chromeos_privacy_screen_add(struct acpi_device *adev)
105+
static int chromeos_privacy_screen_probe(struct platform_device *pdev)
108106
{
109107
struct drm_privacy_screen *drm_privacy_screen =
110-
drm_privacy_screen_register(&adev->dev,
108+
drm_privacy_screen_register(&pdev->dev,
111109
&chromeos_privacy_screen_ops,
112-
&adev->dev);
110+
&pdev->dev);
113111

114112
if (IS_ERR(drm_privacy_screen)) {
115-
dev_err(&adev->dev, "Error registering privacy-screen\n");
113+
dev_err(&pdev->dev, "Error registering privacy-screen\n");
116114
return PTR_ERR(drm_privacy_screen);
117115
}
118116

119-
adev->driver_data = drm_privacy_screen;
120-
dev_info(&adev->dev, "registered privacy-screen '%s'\n",
117+
platform_set_drvdata(pdev, drm_privacy_screen);
118+
dev_info(&pdev->dev, "registered privacy-screen '%s'\n",
121119
dev_name(&drm_privacy_screen->dev));
122120

123121
return 0;
124122
}
125123

126-
static void chromeos_privacy_screen_remove(struct acpi_device *adev)
124+
static void chromeos_privacy_screen_remove(struct platform_device *pdev)
127125
{
128-
struct drm_privacy_screen *drm_privacy_screen = acpi_driver_data(adev);
129-
130-
drm_privacy_screen_unregister(drm_privacy_screen);
126+
drm_privacy_screen_unregister(platform_get_drvdata(pdev));
131127
}
132128

133129
static const struct acpi_device_id chromeos_privacy_screen_device_ids[] = {
@@ -136,17 +132,16 @@ static const struct acpi_device_id chromeos_privacy_screen_device_ids[] = {
136132
};
137133
MODULE_DEVICE_TABLE(acpi, chromeos_privacy_screen_device_ids);
138134

139-
static struct acpi_driver chromeos_privacy_screen_driver = {
140-
.name = "chromeos_privacy_screen_driver",
141-
.class = "ChromeOS",
142-
.ids = chromeos_privacy_screen_device_ids,
143-
.ops = {
144-
.add = chromeos_privacy_screen_add,
145-
.remove = chromeos_privacy_screen_remove,
135+
static struct platform_driver chromeos_privacy_screen_driver = {
136+
.probe = chromeos_privacy_screen_probe,
137+
.remove = chromeos_privacy_screen_remove,
138+
.driver = {
139+
.name = "chromeos_privacy_screen_driver",
140+
.acpi_match_table = chromeos_privacy_screen_device_ids,
146141
},
147142
};
148143

149-
module_acpi_driver(chromeos_privacy_screen_driver);
144+
module_platform_driver(chromeos_privacy_screen_driver);
150145
MODULE_LICENSE("GPL v2");
151146
MODULE_DESCRIPTION("ChromeOS ACPI Privacy Screen driver");
152147
MODULE_AUTHOR("Rajat Jain <rajatja@google.com>");

drivers/platform/chrome/chromeos_tbmc.c

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <linux/input.h>
1717
#include <linux/io.h>
1818
#include <linux/module.h>
19+
#include <linux/platform_device.h>
1920
#include <linux/printk.h>
2021

2122
#define DRV_NAME "chromeos_tbmc"
@@ -40,20 +41,20 @@ static int chromeos_tbmc_query_switch(struct acpi_device *adev,
4041

4142
static __maybe_unused int chromeos_tbmc_resume(struct device *dev)
4243
{
43-
struct acpi_device *adev = to_acpi_device(dev);
44-
45-
return chromeos_tbmc_query_switch(adev, adev->driver_data);
44+
return chromeos_tbmc_query_switch(ACPI_COMPANION(dev), dev_get_drvdata(dev));
4645
}
4746

48-
static void chromeos_tbmc_notify(struct acpi_device *adev, u32 event)
47+
static void chromeos_tbmc_notify(acpi_handle handle, u32 event, void *data)
4948
{
50-
acpi_pm_wakeup_event(&adev->dev);
49+
struct device *dev = data;
50+
51+
acpi_pm_wakeup_event(dev);
5152
switch (event) {
5253
case 0x80:
53-
chromeos_tbmc_query_switch(adev, adev->driver_data);
54+
chromeos_tbmc_query_switch(ACPI_COMPANION(dev), dev_get_drvdata(dev));
5455
break;
5556
default:
56-
dev_err(&adev->dev, "Unexpected event: 0x%08X\n", event);
57+
dev_err(dev, "Unexpected event: 0x%08X\n", event);
5758
}
5859
}
5960

@@ -64,10 +65,11 @@ static int chromeos_tbmc_open(struct input_dev *idev)
6465
return chromeos_tbmc_query_switch(adev, idev);
6566
}
6667

67-
static int chromeos_tbmc_add(struct acpi_device *adev)
68+
static int chromeos_tbmc_probe(struct platform_device *pdev)
6869
{
6970
struct input_dev *idev;
70-
struct device *dev = &adev->dev;
71+
struct device *dev = &pdev->dev;
72+
struct acpi_device *adev = ACPI_COMPANION(dev);
7173
int ret;
7274

7375
idev = devm_input_allocate_device(dev);
@@ -83,7 +85,7 @@ static int chromeos_tbmc_add(struct acpi_device *adev)
8385
idev->open = chromeos_tbmc_open;
8486

8587
input_set_drvdata(idev, adev);
86-
adev->driver_data = idev;
88+
platform_set_drvdata(pdev, idev);
8789

8890
input_set_capability(idev, EV_SW, SW_TABLET_MODE);
8991
ret = input_register_device(idev);
@@ -92,9 +94,25 @@ static int chromeos_tbmc_add(struct acpi_device *adev)
9294
return ret;
9395
}
9496
device_init_wakeup(dev, true);
97+
98+
ret = acpi_dev_install_notify_handler(adev, ACPI_DEVICE_NOTIFY,
99+
chromeos_tbmc_notify, dev);
100+
if (ret) {
101+
dev_err(dev, "cannot install ACPI notify handler\n");
102+
device_init_wakeup(dev, false);
103+
return ret;
104+
}
105+
95106
return 0;
96107
}
97108

109+
static void chromeos_tbmc_remove(struct platform_device *pdev)
110+
{
111+
acpi_dev_remove_notify_handler(ACPI_COMPANION(&pdev->dev),
112+
ACPI_DEVICE_NOTIFY, chromeos_tbmc_notify);
113+
device_init_wakeup(&pdev->dev, false);
114+
}
115+
98116
static const struct acpi_device_id chromeos_tbmc_acpi_device_ids[] = {
99117
{ ACPI_DRV_NAME, 0 },
100118
{ }
@@ -104,18 +122,17 @@ MODULE_DEVICE_TABLE(acpi, chromeos_tbmc_acpi_device_ids);
104122
static SIMPLE_DEV_PM_OPS(chromeos_tbmc_pm_ops, NULL,
105123
chromeos_tbmc_resume);
106124

107-
static struct acpi_driver chromeos_tbmc_driver = {
108-
.name = DRV_NAME,
109-
.class = DRV_NAME,
110-
.ids = chromeos_tbmc_acpi_device_ids,
111-
.ops = {
112-
.add = chromeos_tbmc_add,
113-
.notify = chromeos_tbmc_notify,
125+
static struct platform_driver chromeos_tbmc_driver = {
126+
.probe = chromeos_tbmc_probe,
127+
.remove = chromeos_tbmc_remove,
128+
.driver = {
129+
.name = DRV_NAME,
130+
.acpi_match_table = chromeos_tbmc_acpi_device_ids,
131+
.pm = &chromeos_tbmc_pm_ops,
114132
},
115-
.drv.pm = &chromeos_tbmc_pm_ops,
116133
};
117134

118-
module_acpi_driver(chromeos_tbmc_driver);
135+
module_platform_driver(chromeos_tbmc_driver);
119136

120137
MODULE_LICENSE("GPL v2");
121138
MODULE_DESCRIPTION("ChromeOS ACPI tablet switch driver");

drivers/platform/chrome/cros_ec_lightbar.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,8 @@ static ssize_t sequence_store(struct device *dev, struct device_attribute *attr,
461461
param = (struct ec_params_lightbar *)msg->data;
462462
param->cmd = LIGHTBAR_CMD_SEQ;
463463
param->seq.num = num;
464+
msg->outsize = offsetof(typeof(*param), seq) + sizeof(param->seq);
465+
msg->insize = 0;
464466
ret = lb_throttle();
465467
if (ret)
466468
goto exit;
@@ -516,6 +518,7 @@ static ssize_t program_store(struct device *dev, struct device_attribute *attr,
516518
if (ret)
517519
goto exit;
518520
param = (struct ec_params_lightbar *)msg->data;
521+
msg->insize = 0;
519522

520523
if (lb_version < 3) {
521524
dev_info(dev, "Copying %zu byte program to EC", count);

drivers/platform/chrome/cros_usbpd_logger.c

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* Copyright 2018 Google LLC.
66
*/
77

8+
#include <linux/devm-helpers.h>
89
#include <linux/ktime.h>
910
#include <linux/math64.h>
1011
#include <linux/mod_devicetable.h>
@@ -199,6 +200,7 @@ static int cros_usbpd_logger_probe(struct platform_device *pd)
199200
struct cros_ec_dev *ec_dev = dev_get_drvdata(pd->dev.parent);
200201
struct device *dev = &pd->dev;
201202
struct logger_data *logger;
203+
int ret;
202204

203205
logger = devm_kzalloc(dev, sizeof(*logger), GFP_KERNEL);
204206
if (!logger)
@@ -210,25 +212,20 @@ static int cros_usbpd_logger_probe(struct platform_device *pd)
210212
platform_set_drvdata(pd, logger);
211213

212214
/* Retrieve PD event logs periodically */
213-
INIT_DELAYED_WORK(&logger->log_work, cros_usbpd_log_check);
214-
logger->log_workqueue = create_singlethread_workqueue("cros_usbpd_log");
215+
logger->log_workqueue = devm_alloc_ordered_workqueue(dev, "cros_usbpd_log", 0);
215216
if (!logger->log_workqueue)
216217
return -ENOMEM;
217218

219+
ret = devm_delayed_work_autocancel(dev, &logger->log_work, cros_usbpd_log_check);
220+
if (ret)
221+
return ret;
222+
218223
queue_delayed_work(logger->log_workqueue, &logger->log_work,
219224
CROS_USBPD_LOG_UPDATE_DELAY);
220225

221226
return 0;
222227
}
223228

224-
static void cros_usbpd_logger_remove(struct platform_device *pd)
225-
{
226-
struct logger_data *logger = platform_get_drvdata(pd);
227-
228-
cancel_delayed_work_sync(&logger->log_work);
229-
destroy_workqueue(logger->log_workqueue);
230-
}
231-
232229
static int __maybe_unused cros_usbpd_logger_resume(struct device *dev)
233230
{
234231
struct logger_data *logger = dev_get_drvdata(dev);
@@ -263,7 +260,6 @@ static struct platform_driver cros_usbpd_logger_driver = {
263260
.pm = &cros_usbpd_logger_pm_ops,
264261
},
265262
.probe = cros_usbpd_logger_probe,
266-
.remove = cros_usbpd_logger_remove,
267263
.id_table = cros_usbpd_logger_id,
268264
};
269265

0 commit comments

Comments
 (0)