瀏覽代碼

Merge "usb: redriver: nb7vpq904m: add inline function check_devnode()"

qctecmdr 3 年之前
父節點
當前提交
f25dc242e3
共有 1 個文件被更改,包括 20 次插入44 次删除
  1. 20 44
      drivers/usb/misc/ssusb-redriver-nb7vpq904m.c

+ 20 - 44
drivers/usb/misc/ssusb-redriver-nb7vpq904m.c

@@ -429,20 +429,26 @@ static int ssusb_redriver_read_orientation(struct ssusb_redriver *redriver)
 	return 0;
 }
 
-int redriver_orientation_get(struct device_node *node)
+static inline void *check_devnode(struct device_node *node)
 {
-	struct ssusb_redriver *redriver;
 	struct i2c_client *client;
 
 	if (!node)
-		return -ENODEV;
+		return ERR_PTR(-ENODEV);
 
 	client = of_find_i2c_device_by_node(node);
 	if (!client)
-		return -ENODEV;
+		return ERR_PTR(-ENODEV);
 
-	redriver = i2c_get_clientdata(client);
-	if (!redriver)
+	return i2c_get_clientdata(client);
+}
+
+int redriver_orientation_get(struct device_node *node)
+{
+	struct ssusb_redriver *redriver;
+
+	redriver = check_devnode(node);
+	if (IS_ERR_OR_NULL(redriver))
 		return -EINVAL;
 
 	if (!gpio_is_valid(redriver->orientation_gpio))
@@ -516,17 +522,9 @@ static int ssusb_redriver_ucsi_notifier(struct notifier_block *nb,
 int redriver_notify_connect(struct device_node *node)
 {
 	struct ssusb_redriver *redriver;
-	struct i2c_client *client;
 
-	if (!node)
-		return -ENODEV;
-
-	client = of_find_i2c_device_by_node(node);
-	if (!client)
-		return -ENODEV;
-
-	redriver = i2c_get_clientdata(client);
-	if (!redriver)
+	redriver = check_devnode(node);
+	if (IS_ERR_OR_NULL(redriver))
 		return -EINVAL;
 
 	if ((redriver->op_mode == OP_MODE_DEFAULT) ||
@@ -558,17 +556,9 @@ EXPORT_SYMBOL(redriver_notify_connect);
 int redriver_notify_disconnect(struct device_node *node)
 {
 	struct ssusb_redriver *redriver;
-	struct i2c_client *client;
-
-	if (!node)
-		return -ENODEV;
 
-	client = of_find_i2c_device_by_node(node);
-	if (!client)
-		return -ENODEV;
-
-	redriver = i2c_get_clientdata(client);
-	if (!redriver)
+	redriver = check_devnode(node);
+	if (IS_ERR_OR_NULL(redriver))
 		return -EINVAL;
 
 	/* 1. no operation in recovery mode.
@@ -595,17 +585,9 @@ EXPORT_SYMBOL(redriver_notify_disconnect);
 int redriver_release_usb_lanes(struct device_node *node)
 {
 	struct ssusb_redriver *redriver;
-	struct i2c_client *client;
-
-	if (!node)
-		return -ENODEV;
-
-	client = of_find_i2c_device_by_node(node);
-	if (!client)
-		return -ENODEV;
 
-	redriver = i2c_get_clientdata(client);
-	if (!redriver)
+	redriver = check_devnode(node);
+	if (IS_ERR_OR_NULL(redriver))
 		return -EINVAL;
 
 	if (redriver->op_mode == OP_MODE_DP)
@@ -625,18 +607,12 @@ EXPORT_SYMBOL(redriver_release_usb_lanes);
 int redriver_gadget_pullup(struct device_node *node, int is_on)
 {
 	struct ssusb_redriver *redriver;
-	struct i2c_client *client;
 	u8 val = 0;
 
-	if (!node)
+	redriver = check_devnode(node);
+	if (IS_ERR_OR_NULL(redriver))
 		return -EINVAL;
 
-	client = of_find_i2c_device_by_node(node);
-	if (!client)
-		return -EINVAL;
-
-	redriver = i2c_get_clientdata(client);
-
 	/*
 	 * when redriver connect to a USB hub, and do adb root operation,
 	 * due to redriver rx termination detection issue,