Inter-revision diff: patch 2

Comparing v6 (message) to v2 (message)

--- v6
+++ v2
@@ -4,59 +4,42 @@
 
 Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
 ---
- drivers/hid/hid-playstation.c | 58 +++++++++++++++++++++++++++++++++++
- 1 file changed, 58 insertions(+)
+ drivers/hid/hid-playstation.c | 40 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 40 insertions(+)
 
 diff --git a/drivers/hid/hid-playstation.c b/drivers/hid/hid-playstation.c
-index 7d4171a89322..aca49637ef2f 100644
+index 3d5fe9069c26..af4a635997bb 100644
 --- a/drivers/hid/hid-playstation.c
 +++ b/drivers/hid/hid-playstation.c
-@@ -20,6 +20,7 @@
+@@ -21,12 +21,16 @@
  /* Base class for playstation devices. */
  struct ps_device {
  	struct hid_device *hdev;
-+	uint8_t mac_address[6]; /* Note: stored in little endian order. */
++	uint8_t mac_address[6];
  
  	int (*parse_report)(struct ps_device *dev, struct hid_report *report, u8 *data, int size);
  };
-@@ -27,6 +28,9 @@ struct ps_device {
+ 
  #define DS_INPUT_REPORT_USB			0x01
- #define DS_INPUT_REPORT_USB_SIZE		64
  
-+#define DS_FEATURE_REPORT_PAIRING_INFO		0x09
-+#define DS_FEATURE_REPORT_PAIRING_INFO_SIZE	20
++#define DS_FEATURE_REPORT_PAIRING_INFO		9
++#define DS_FEATURE_REPORT_PAIRING_INFO_SIZE	19
 +
  /* Button masks for DualSense input report. */
  #define DS_BUTTONS0_HAT_SWITCH	GENMASK(3, 0)
  #define DS_BUTTONS0_SQUARE	BIT(4)
-@@ -166,6 +170,53 @@ static struct input_dev *ps_gamepad_create(struct hid_device *hdev)
+@@ -132,6 +136,7 @@ static struct input_dev *ps_allocate_input_dev(struct hid_device *hdev, const ch
+ 	return input_dev;
+ }
+ 
++
+ static struct input_dev *ps_gamepad_create(struct hid_device *hdev)
+ {
+ 	struct input_dev *gamepad;
+@@ -162,6 +167,34 @@ static struct input_dev *ps_gamepad_create(struct hid_device *hdev)
  	return gamepad;
  }
  
-+static int ps_get_report(struct hid_device *hdev, uint8_t report_id, uint8_t *buf, size_t size)
-+{
-+	int ret;
-+
-+	ret = hid_hw_raw_request(hdev, report_id, buf, size, HID_FEATURE_REPORT,
-+				 HID_REQ_GET_REPORT);
-+	if (ret < 0) {
-+		hid_err(hdev, "Failed to retrieve feature with reportID %d: %d\n", report_id, ret);
-+		return ret;
-+	}
-+
-+	if (ret != size) {
-+		hid_err(hdev, "Invalid byte count transferred, expected %zu got %d\n", size, ret);
-+		return -EINVAL;
-+	}
-+
-+	if (buf[0] != report_id) {
-+		hid_err(hdev, "Invalid reportID received, expected %d got %d\n", report_id, buf[0]);
-+		return -EINVAL;
-+	}
-+
-+	return 0;
-+}
-+
 +static int dualsense_get_mac_address(struct dualsense *ds)
 +{
 +	uint8_t *buf;
@@ -66,13 +49,18 @@
 +	if (!buf)
 +		return -ENOMEM;
 +
-+	ret = ps_get_report(ds->base.hdev, DS_FEATURE_REPORT_PAIRING_INFO, buf,
-+			DS_FEATURE_REPORT_PAIRING_INFO_SIZE);
-+	if (ret) {
-+		hid_err(ds->base.hdev, "Failed to retrieve DualSense pairing info: %d\n", ret);
++	ret = hid_hw_raw_request(ds->base.hdev, DS_FEATURE_REPORT_PAIRING_INFO, buf,
++			DS_FEATURE_REPORT_PAIRING_INFO_SIZE, HID_FEATURE_REPORT,
++			HID_REQ_GET_REPORT);
++	if (ret < 0)
++		goto err_free;
++	else if (ret != DS_FEATURE_REPORT_PAIRING_INFO_SIZE) {
++		hid_err(ds->base.hdev, "failed to retrieve DualSense pairing info\n");
++		ret = -EINVAL;
 +		goto err_free;
 +	}
 +
++	/* Note MAC address is stored in little endian order. */
 +	memcpy(ds->base.mac_address, &buf[1], sizeof(ds->base.mac_address));
 +
 +err_free:
@@ -83,12 +71,12 @@
  static int dualsense_parse_report(struct ps_device *ps_dev, struct hid_report *report,
  		u8 *data, int size)
  {
-@@ -237,6 +288,13 @@ static struct ps_device *dualsense_create(struct hid_device *hdev)
+@@ -230,6 +263,13 @@ static struct ps_device *dualsense_create(struct hid_device *hdev)
  	ds->base.parse_report = dualsense_parse_report;
  	hid_set_drvdata(hdev, ds);
  
 +	ret = dualsense_get_mac_address(ds);
-+	if (ret) {
++	if (ret < 0) {
 +		hid_err(hdev, "Failed to get MAC address from DualSense\n");
 +		return ERR_PTR(ret);
 +	}
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help