|
@@ -132,6 +132,33 @@ void serdev_device_close(struct serdev_device *serdev)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(serdev_device_close);
|
|
|
|
|
|
+static void devm_serdev_device_release(struct device *dev, void *dr)
|
|
|
+{
|
|
|
+ serdev_device_close(*(struct serdev_device **)dr);
|
|
|
+}
|
|
|
+
|
|
|
+int devm_serdev_device_open(struct device *dev, struct serdev_device *serdev)
|
|
|
+{
|
|
|
+ struct serdev_device **dr;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ dr = devres_alloc(devm_serdev_device_release, sizeof(*dr), GFP_KERNEL);
|
|
|
+ if (!dr)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ ret = serdev_device_open(serdev);
|
|
|
+ if (ret) {
|
|
|
+ devres_free(dr);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ *dr = serdev;
|
|
|
+ devres_add(dev, dr);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(devm_serdev_device_open);
|
|
|
+
|
|
|
void serdev_device_write_wakeup(struct serdev_device *serdev)
|
|
|
{
|
|
|
complete(&serdev->write_comp);
|