35
35
#include <linux/dmi.h>
36
36
37
37
#define MAX_MODEL_NAME 16
38
- #define MAX_SERIAL_NUMBER 19
38
+ #define MAX_SERIAL_NUMBER 20
39
39
40
40
static ssize_t show_status (struct device * dev , struct device_attribute * da , char * buf );
41
41
static ssize_t show_string (struct device * dev , struct device_attribute * da , char * buf );
@@ -280,18 +280,45 @@ static struct as9716_32d_psu_data *as9716_32d_psu_update_device(struct device *d
280
280
data -> model_name [0 ] = '\0' ;
281
281
dev_dbg (& client -> dev , "unable to read model name from (0x%x)\n" , client -> addr );
282
282
}
283
- else {
284
- data -> model_name [ARRAY_SIZE (data -> model_name )- 1 ] = '\0' ;
283
+ else
284
+ {
285
+ if (!strncmp (data -> model_name , "FSH082" , strlen ("FSH082" )))
286
+ {
287
+ data -> model_name [strlen ("FSH082" )]= '\0' ;
288
+ }
289
+ else if (!strncmp (data -> model_name , "YESM1300" , strlen ("YESM1300" )))
290
+ {
291
+ if (data -> model_name [9 ]== 'A' && data -> model_name [10 ]== 'M' )
292
+ {
293
+ data -> model_name [8 ]= 'A' ;
294
+ data -> model_name [9 ]= 'M' ;
295
+ data -> model_name [strlen ("YESM1300AM" )]= '\0' ;
296
+ }
297
+ else
298
+ data -> model_name [strlen ("YESM1300" )]= '\0' ;
299
+ }
300
+ else if (!strncmp (data -> model_name , "YM-2651Y" , strlen ("YM-2651Y" )))
301
+ {
302
+ data -> model_name [strlen ("YM-2651Y" )]= '\0' ;
303
+ }
304
+ else
305
+ data -> model_name [ARRAY_SIZE (data -> model_name )- 1 ] = '\0' ;
285
306
286
307
}
287
- /* Read from offset 0x2e ~ 0x3d (16 bytes) */
288
- status = as9716_32d_psu_read_block (client , 0x2e ,data -> serial_number , MAX_SERIAL_NUMBER );
308
+ /* Read from offset 0x35 ~ 0x47 */
309
+ status = as9716_32d_psu_read_block (client , 0x35 ,data -> serial_number , MAX_SERIAL_NUMBER );
289
310
if (status < 0 )
290
311
{
291
312
data -> serial_number [0 ] = '\0' ;
292
313
dev_dbg (& client -> dev , "unable to read model name from (0x%x) offset(0x2e)\n" , client -> addr );
293
314
}
294
- data -> serial_number [MAX_SERIAL_NUMBER - 1 ]= '\0' ;
315
+ if (!strncmp (data -> model_name , "YESM1300AM" , strlen ("YESM1300AM" ))) /*for YESM1300AM, SN length=19*/
316
+ {
317
+ data -> serial_number [MAX_SERIAL_NUMBER - 1 ]= '\0' ;
318
+ }
319
+ else /*for FSH082, SN length=18*/
320
+ data -> serial_number [MAX_SERIAL_NUMBER - 2 ]= '\0' ;
321
+
295
322
}
296
323
297
324
data -> last_updated = jiffies ;
@@ -308,4 +335,3 @@ module_i2c_driver(as9716_32d_psu_driver);
308
335
MODULE_AUTHOR (
"Jostar Yang <[email protected] >" );
309
336
MODULE_DESCRIPTION ("as9716_32d_psu driver" );
310
337
MODULE_LICENSE ("GPL" );
311
-
0 commit comments