Skip to content

Commit c4a63fa

Browse files
committed
Implement firmware field decoding.
Signed-off-by: Joseph East <[email protected]>
1 parent 44de5bb commit c4a63fa

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

drivers/hwmon/razer_hanbo.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,11 @@ static const u8 ack_header_type_b[] = { 0x00, 0x02, 0x02, 0x01 };
6161
#define SET_PROFILE_CMD_LENGTH 4
6262
#define SET_CURVE_CMD_LENGTH 13
6363
#define SET_CPU_TEMP_CMD_LENGTH 6
64-
#define FIRMWARE_VERSION_LENGTH 8
6564
#define SERIAL_NUMBER_LENGTH 15
6665
#define SET_PROFILE_ID_OFFSET 2
6766
#define SET_PROFILE_PWM_OFFSET 3
6867
#define SET_CPU_TEMP_PAYLOAD_OFFSET 2
69-
#define FIRMWARE_VERSION_OFFSET 26
68+
#define FIRMWARE_VERSION_OFFSET 29
7069
#define SERIAL_NUMBER_OFFSET 3
7170
#define CURVE_PAYLOAD_OFFSET 4
7271
#define SHORT_ACK_LENGTH 2
@@ -117,7 +116,7 @@ struct hanbo_data {
117116
struct hanbo_pwm_channel channel_info[2];
118117
/* Staging buffer for sending HID packets */
119118
u8 *buffer;
120-
u8 firmware_version[8];
119+
u8 firmware_version[6];
121120
char serial_number[15];
122121
unsigned long updated; /* jiffies */
123122
};
@@ -575,11 +574,8 @@ static const struct hwmon_chip_info hanbo_chip_info = {
575574
static int firmware_version_show(struct seq_file *seqf, void *unused)
576575
{
577576
struct hanbo_data *priv = seqf->private;
578-
int i;
579577

580-
for (i = 0; i < FIRMWARE_VERSION_LENGTH; i++)
581-
seq_printf(seqf, "%02X", priv->firmware_version[i]);
582-
seq_puts(seqf, "\n");
578+
seq_printf(seqf, "%s\n", priv->firmware_version);
583579
return 0;
584580
}
585581

@@ -601,7 +597,7 @@ static void hanbo_debugfs_init(struct hanbo_data *priv)
601597
{
602598
char name[64];
603599

604-
if (priv->firmware_version[0] != 0x80)
600+
if (priv->firmware_version[0] == '\0')
605601
return; /* When here, nothing to show in debugfs */
606602

607603
scnprintf(name, sizeof(name), "%s-%s", DRIVER_NAME,
@@ -637,9 +633,12 @@ static int hanbo_raw_event(struct hid_device *hdev, struct hid_report *report,
637633
if (ret < 0)
638634
goto fail_and_return;
639635
int i;
636+
char major = 0x30 + data[FIRMWARE_VERSION_OFFSET];
637+
char minor = 0x30 + (data[FIRMWARE_VERSION_OFFSET + 1] >> 4 & 0x0F);
638+
char patch = 0x30 + (data[FIRMWARE_VERSION_OFFSET + 1] & 0x0F);
640639

641-
for (i = 0; i < FIRMWARE_VERSION_LENGTH; i++)
642-
priv->firmware_version[i] = data[FIRMWARE_VERSION_OFFSET + i];
640+
snprintf(priv->firmware_version, sizeof(priv->firmware_version),
641+
"%c.%c.%c", major, minor, patch);
643642
for (i = 0; i < SERIAL_NUMBER_LENGTH; i++)
644643
priv->serial_number[i] = data[SERIAL_NUMBER_OFFSET + i];
645644
if (!completion_done(&priv->fw_version_processed))
@@ -729,6 +728,7 @@ static int hanbo_drv_init(struct hid_device *hdev)
729728
struct hanbo_data *priv = hid_get_drvdata(hdev);
730729
int ret;
731730

731+
priv->firmware_version[0] = '\0';
732732
ret = hanbo_hid_write_expanded(priv, get_firmware_ver_cmd,
733733
GET_FIRMWARE_VER_CMD_LENGTH);
734734
if (ret < 0)

0 commit comments

Comments
 (0)