Skip to content

Commit e392cf1

Browse files
committed
sysfs control
Signed-off-by: Jishnu Prakash <jishnu.prakash@oss.qualcomm.com>
1 parent d9a47eb commit e392cf1

1 file changed

Lines changed: 44 additions & 1 deletion

File tree

drivers/usb/typec/ucsi/ucsi_glink.c

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ struct pmic_glink_ucsi {
8989
bool pd_running;
9090

9191
u8 read_buf[UCSI_BUF_V2_SIZE];
92+
93+
/* Wakeup timeout in ms; configurable via sysfs wakeup_timeout_ms */
94+
unsigned int wakeup_timeout_ms;
9295
};
9396

9497
static int pmic_glink_ucsi_read(struct ucsi *__ucsi, unsigned int offset,
@@ -339,6 +342,41 @@ static void pmic_glink_ucsi_register(struct work_struct *work)
339342
}
340343
}
341344

345+
static ssize_t wakeup_timeout_ms_show(struct device *dev,
346+
struct device_attribute *attr, char *buf)
347+
{
348+
struct pmic_glink_ucsi *ucsi = dev_get_drvdata(dev);
349+
350+
return sysfs_emit(buf, "%u\n", READ_ONCE(ucsi->wakeup_timeout_ms));
351+
}
352+
353+
static ssize_t wakeup_timeout_ms_store(struct device *dev,
354+
struct device_attribute *attr,
355+
const char *buf, size_t count)
356+
{
357+
struct pmic_glink_ucsi *ucsi = dev_get_drvdata(dev);
358+
unsigned int val;
359+
int ret;
360+
361+
ret = kstrtouint(buf, 10, &val);
362+
if (ret)
363+
return ret;
364+
365+
WRITE_ONCE(ucsi->wakeup_timeout_ms, val);
366+
return count;
367+
}
368+
369+
static DEVICE_ATTR_RW(wakeup_timeout_ms);
370+
371+
static struct attribute *pmic_glink_ucsi_attrs[] = {
372+
&dev_attr_wakeup_timeout_ms.attr,
373+
NULL,
374+
};
375+
376+
static const struct attribute_group pmic_glink_ucsi_attr_group = {
377+
.attrs = pmic_glink_ucsi_attrs,
378+
};
379+
342380
static void pmic_glink_ucsi_callback(const void *data, size_t len, void *priv)
343381
{
344382
struct pmic_glink_ucsi *ucsi = priv;
@@ -352,7 +390,7 @@ static void pmic_glink_ucsi_callback(const void *data, size_t len, void *priv)
352390
pmic_glink_ucsi_write_ack(ucsi, data, len);
353391
break;
354392
case UC_UCSI_USBC_NOTIFY_IND:
355-
pm_wakeup_event(ucsi->dev, UCSI_GLINK_WAKEUP_TIMEOUT_MS);
393+
pm_wakeup_event(ucsi->dev, READ_ONCE(ucsi->wakeup_timeout_ms));
356394
schedule_work(&ucsi->notify_work);
357395
break;
358396
}
@@ -413,6 +451,11 @@ static int pmic_glink_ucsi_probe(struct auxiliary_device *adev,
413451
dev_set_drvdata(dev, ucsi);
414452

415453
device_init_wakeup(dev, true);
454+
ucsi->wakeup_timeout_ms = UCSI_GLINK_WAKEUP_TIMEOUT_MS;
455+
456+
ret = devm_device_add_group(dev, &pmic_glink_ucsi_attr_group);
457+
if (ret)
458+
return ret;
416459

417460
INIT_WORK(&ucsi->notify_work, pmic_glink_ucsi_notify);
418461
INIT_WORK(&ucsi->register_work, pmic_glink_ucsi_register);

0 commit comments

Comments
 (0)