@@ -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 = {
575574static 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