@@ -583,7 +583,6 @@ enum cpld_type {
583
583
struct cpld_platform_data {
584
584
int reg_addr ;
585
585
struct i2c_client * client ;
586
- //struct kobject *kobj;
587
586
};
588
587
589
588
enum swpld_attributes {
@@ -672,7 +671,7 @@ static struct platform_device ag9032v1_cpld = {
672
671
.id = 0 ,
673
672
.dev = {
674
673
.platform_data = ag9032v1_cpld_platform_data ,
675
- .release = device_release
674
+ .release = device_release ,
676
675
},
677
676
};
678
677
@@ -1547,6 +1546,7 @@ static struct attribute_group ag9032v1_cpld_attr_grp = {
1547
1546
.attrs = ag9032v1_cpld_attrs ,
1548
1547
};
1549
1548
1549
+ static struct kobject * kobj_swpld ;
1550
1550
static struct kobject * kobj_board ;
1551
1551
static struct kobject * kobj_psu ;
1552
1552
static struct kobject * kobj_hot_swap ;
@@ -1557,8 +1557,10 @@ static ssize_t get_swpld_data(struct device *dev, struct device_attribute *dev_a
1557
1557
{
1558
1558
int ret ;
1559
1559
struct sensor_device_attribute * attr = to_sensor_dev_attr (dev_attr );
1560
- struct device * i2cdev = kobj_to_dev (kobj_board -> parent );
1560
+ struct device * i2cdev = kobj_to_dev (kobj_swpld );
1561
1561
struct cpld_platform_data * pdata = i2cdev -> platform_data ;
1562
+
1563
+
1562
1564
unsigned char reg ;
1563
1565
int mask ;
1564
1566
int value ;
@@ -1572,33 +1574,29 @@ static ssize_t get_swpld_data(struct device *dev, struct device_attribute *dev_a
1572
1574
value = ret >> 4 ;
1573
1575
sprintf (note , "\n“0x00”: L9032NB-AL-R\n“0x01”: AK9032-R\n“0x02”: AG9032-R\n“0x03”: AG9032R-R\n“0x04”: AG9032 V1-R\n" );
1574
1576
return sprintf (buf , "0x%02x%s" , value , note );
1575
- break ;
1576
1577
case SW_BOARD_VER :
1577
1578
reg = 0x00 ;
1578
1579
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , reg );
1579
1580
value = ret & 0x0F ;
1580
1581
sprintf (note , "\n“0x00”: proto-A\n“0x01”: proto-B\n" );
1581
1582
return sprintf (buf , "0x%02x%s" , value , note );
1582
- break ;
1583
1583
case SWPLD_VER :
1584
1584
reg = 0x01 ;
1585
1585
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , reg );
1586
1586
value = ret & 0xFF ;
1587
1587
sprintf (note , " " );
1588
1588
return sprintf (buf , "0x%02x%s" , value , note );
1589
- break ;
1590
1589
//other attributes
1591
1590
case SYS_RST ... QSFP32_MOD_INT :
1592
1591
reg = controller_interrupt_data [attr -> index ].reg_addr ;
1593
1592
mask = controller_interrupt_data [attr -> index ].reg_mask ;
1594
1593
sprintf (note , "\n%s\n" ,controller_interrupt_data [attr -> index ].reg_note );
1595
- break ;
1594
+ ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , reg );
1595
+ value = (ret & (1 << mask )) >> mask ;
1596
+ return sprintf (buf , "%d%s" , value , note );
1596
1597
default :
1597
1598
return sprintf (buf , "%d not found" , attr -> index );
1598
1599
}
1599
- ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , reg );
1600
- value = (ret & (1 << mask )) >> mask ;
1601
- return sprintf (buf , "%d%s" , value , note );
1602
1600
}
1603
1601
1604
1602
static ssize_t set_swpld_data (struct device * dev , struct device_attribute * dev_attr , const char * buf , size_t count )
@@ -1633,7 +1631,6 @@ static ssize_t set_swpld_data(struct device *dev, struct device_attribute *dev_a
1633
1631
case QSFP_01TO08_MASK_INT ... QSFP_25TO32_MASK_ABS :
1634
1632
reg = controller_interrupt_data [attr -> index ].reg_addr ;
1635
1633
mask = controller_interrupt_data [attr -> index ].reg_mask ;
1636
- sprintf (note , "\n%s\n" ,controller_interrupt_data [attr -> index ].reg_note );
1637
1634
break ;
1638
1635
default :
1639
1636
return sprintf (buf , "%d not found" , attr -> index );
@@ -1856,6 +1853,7 @@ static int __init cpld_probe(struct platform_device *pdev)
1856
1853
goto error ;
1857
1854
}
1858
1855
1856
+ kobj_swpld = & pdev -> dev .kobj ;
1859
1857
kobj_board = kobject_create_and_add ("Board" , & pdev -> dev .kobj );
1860
1858
if (!kobj_board ){
1861
1859
printk (KERN_WARNING "Fail to create directory" );
@@ -1925,6 +1923,7 @@ static int __init cpld_probe(struct platform_device *pdev)
1925
1923
return 0 ;
1926
1924
1927
1925
error :
1926
+ kobject_put (kobj_swpld );
1928
1927
kobject_put (kobj_board );
1929
1928
kobject_put (kobj_psu );
1930
1929
kobject_put (kobj_hot_swap );
@@ -1947,6 +1946,7 @@ static int __exit cpld_remove(struct platform_device *pdev)
1947
1946
dev_err (& pdev -> dev , "Missing platform data\n" );
1948
1947
}
1949
1948
else {
1949
+ kobject_put (kobj_swpld );
1950
1950
kobject_put (kobj_board );
1951
1951
kobject_put (kobj_psu );
1952
1952
kobject_put (kobj_hot_swap );
@@ -2266,7 +2266,7 @@ static void __init delta_ag9032v1_platform_init(void)
2266
2266
struct i2c_client * client ;
2267
2267
struct i2c_adapter * adapter ;
2268
2268
struct cpld_platform_data * cpld_pdata ;
2269
- struct swpld_mux_platform_data * swpld_pdata ;
2269
+ struct swpld_mux_platform_data * swpld_mux_pdata ;
2270
2270
int ret ,i = 0 ;
2271
2271
printk ("ag9032v1_platform module initialization\n" );
2272
2272
@@ -2308,8 +2308,8 @@ static void __init delta_ag9032v1_platform_init(void)
2308
2308
2309
2309
for (i = 0 ; i < ARRAY_SIZE (ag9032v1_swpld_mux ); i ++ )
2310
2310
{
2311
- swpld_pdata = ag9032v1_swpld_mux [i ].dev .platform_data ;
2312
- swpld_pdata -> cpld = cpld_pdata [system_cpld ].client ;
2311
+ swpld_mux_pdata = ag9032v1_swpld_mux [i ].dev .platform_data ;
2312
+ swpld_mux_pdata -> cpld = cpld_pdata [system_cpld ].client ;
2313
2313
ret = platform_device_register (& ag9032v1_swpld_mux [i ]);
2314
2314
if (ret ) {
2315
2315
printk (KERN_WARNING "Fail to create swpld mux %d\n" , i );
0 commit comments