@@ -248,25 +248,25 @@ static struct i2c_device_platform_data ag9032v1_i2c_device_platform_data[] = {
248
248
{
249
249
/* psu 1 (0x58) */
250
250
.parent = 40 ,
251
- .info = { .type = "dni_ag9032v1_psu" , .addr = 0x58 , .platform_data = 0 },
251
+ .info = { .type = "dni_ag9032v1_psu" , .addr = 0x58 , .platform_data = ( void * ) 0 },
252
252
.client = NULL ,
253
253
},
254
254
{
255
255
/* psu 2 (0x58) */
256
256
.parent = 41 ,
257
- .info = { .type = "dni_ag9032v1_psu" , .addr = 0x58 , .platform_data = 1 },
257
+ .info = { .type = "dni_ag9032v1_psu" , .addr = 0x58 , .platform_data = ( void * ) 1 },
258
258
.client = NULL ,
259
259
},
260
260
{
261
261
/* hot-swap 1 (0x40) */
262
262
.parent = 42 ,
263
- .info = { .type = "ltc4215" , .addr = 0x40 , .platform_data = 0 },
263
+ .info = { .type = "ltc4215" , .addr = 0x40 , .platform_data = ( void * ) 0 },
264
264
.client = NULL ,
265
265
},
266
266
{
267
267
/* hot-swap 2 (0x40) */
268
268
.parent = 43 ,
269
- .info = { .type = "ltc4215" , .addr = 0x40 , .platform_data = 1 },
269
+ .info = { .type = "ltc4215" , .addr = 0x40 , .platform_data = ( void * ) 1 },
270
270
.client = NULL ,
271
271
},
272
272
{
@@ -1043,22 +1043,22 @@ static ssize_t get_present(struct device *dev, struct device_attribute \
1043
1043
1044
1044
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_PRESENCE_1 );
1045
1045
if (ret < 0 )
1046
- return sprintf (buf , "error number(%ld )" ,ret );
1046
+ return sprintf (buf , "error number(%d )" ,ret );
1047
1047
data = (u32 )reverse_8bits (ret ) & 0xff ;
1048
1048
1049
1049
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_PRESENCE_2 );
1050
1050
if (ret < 0 )
1051
- return sprintf (buf , "error number(%ld )" ,ret );
1051
+ return sprintf (buf , "error number(%d )" ,ret );
1052
1052
data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 8 ;
1053
1053
1054
1054
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_PRESENCE_3 );
1055
1055
if (ret < 0 )
1056
- return sprintf (buf , "error number(%ld )" ,ret );
1056
+ return sprintf (buf , "error number(%d )" ,ret );
1057
1057
data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 16 ;
1058
1058
1059
1059
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_PRESENCE_4 );
1060
1060
if (ret < 0 )
1061
- return sprintf (buf , "error number(%ld )" ,ret );
1061
+ return sprintf (buf , "error number(%d )" ,ret );
1062
1062
data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 24 ;
1063
1063
1064
1064
return sprintf (buf , "0x%08x\n" , data ); //return 32bits data
@@ -1072,22 +1072,22 @@ static ssize_t get_lpmode(struct device *dev, struct device_attribute *devattr,
1072
1072
1073
1073
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_LP_MODE_1 );
1074
1074
if (ret < 0 )
1075
- return sprintf (buf , "error number(%ld )" ,ret );
1075
+ return sprintf (buf , "error number(%d )" ,ret );
1076
1076
data = (u32 )(reverse_8bits (ret ) & 0xff );
1077
1077
1078
1078
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_LP_MODE_2 );
1079
1079
if (ret < 0 )
1080
- return sprintf (buf , "error number(%ld )" ,ret );
1080
+ return sprintf (buf , "error number(%d )" ,ret );
1081
1081
data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 8 ;
1082
1082
1083
1083
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_LP_MODE_3 );
1084
1084
if (ret < 0 )
1085
- return sprintf (buf , "error number(%ld )" ,ret );
1085
+ return sprintf (buf , "error number(%d )" ,ret );
1086
1086
data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 16 ;
1087
1087
1088
1088
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_LP_MODE_4 );
1089
1089
if (ret < 0 )
1090
- return sprintf (buf , "error number(%ld )" ,ret );
1090
+ return sprintf (buf , "error number(%d )" ,ret );
1091
1091
data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 24 ;
1092
1092
1093
1093
return sprintf (buf , "0x%08x\n" , data ); //return 32bits data
@@ -1119,22 +1119,22 @@ static ssize_t get_reset(struct device *dev, struct device_attribute *devattr, c
1119
1119
1120
1120
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESET_1 );
1121
1121
if (ret < 0 )
1122
- return sprintf (buf , "error number(%ld )" ,ret );
1122
+ return sprintf (buf , "error number(%d )" ,ret );
1123
1123
data = (u32 )(reverse_8bits (ret ) & 0xff );
1124
1124
1125
1125
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESET_2 );
1126
1126
if (ret < 0 )
1127
- return sprintf (buf , "error number(%ld )" ,ret );
1127
+ return sprintf (buf , "error number(%d )" ,ret );
1128
1128
data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 8 ;
1129
1129
1130
1130
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESET_3 );
1131
1131
if (ret < 0 )
1132
- return sprintf (buf , "error number(%ld )" ,ret );
1132
+ return sprintf (buf , "error number(%d )" ,ret );
1133
1133
data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 16 ;
1134
1134
1135
1135
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESET_4 );
1136
1136
if (ret < 0 )
1137
- return sprintf (buf , "error number(%ld )" ,ret );
1137
+ return sprintf (buf , "error number(%d )" ,ret );
1138
1138
data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 24 ;
1139
1139
1140
1140
return sprintf (buf , "0x%08x\n" , data ); //return 32bits data
@@ -1166,22 +1166,22 @@ static ssize_t get_response(struct device *dev, struct device_attribute *devattr
1166
1166
1167
1167
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESPONSE_1 );
1168
1168
if (ret < 0 )
1169
- return sprintf (buf , "error number(%ld )" ,ret );
1169
+ return sprintf (buf , "error number(%d )" ,ret );
1170
1170
data = (u32 )(reverse_8bits (ret ) & 0xff );
1171
1171
1172
1172
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESPONSE_2 );
1173
1173
if (ret < 0 )
1174
- return sprintf (buf , "error number(%ld )" ,ret );
1174
+ return sprintf (buf , "error number(%d )" ,ret );
1175
1175
data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 8 ;
1176
1176
1177
1177
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESPONSE_3 );
1178
1178
if (ret < 0 )
1179
- return sprintf (buf , "error number(%ld )" ,ret );
1179
+ return sprintf (buf , "error number(%d )" ,ret );
1180
1180
data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 16 ;
1181
1181
1182
1182
ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESPONSE_4 );
1183
1183
if (ret < 0 )
1184
- return sprintf (buf , "error number(%ld )" ,ret );
1184
+ return sprintf (buf , "error number(%d )" ,ret );
1185
1185
data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 24 ;
1186
1186
1187
1187
return sprintf (buf , "0x%08x\n" , data ); //return 32bits data
@@ -2048,6 +2048,7 @@ static int cpld_reg_write_byte(struct i2c_client *client, u8 regaddr, u8 val)
2048
2048
regaddr , I2C_SMBUS_BYTE_DATA , & data );
2049
2049
}
2050
2050
2051
+ #if LINUX_VERSION_CODE < KERNEL_VERSION (4 ,7 ,0 )
2051
2052
static int swpld_mux_select (struct i2c_adapter * adap , void * data , u8 chan )
2052
2053
{
2053
2054
struct swpld_mux * mux = data ;
@@ -2123,7 +2124,86 @@ static int swpld_mux_select(struct i2c_adapter *adap, void *data, u8 chan)
2123
2124
}
2124
2125
return cpld_reg_write_byte (mux -> data .cpld , mux -> data .reg_addr , (u8 )(swpld_mux_val & 0xff ));
2125
2126
}
2127
+ #else // #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0)
2128
+ static int swpld_mux_select (struct i2c_mux_core * muxc , u32 chan )
2129
+ {
2130
+ struct swpld_mux * mux = i2c_mux_priv (muxc );
2131
+ u8 swpld_mux_val = 0 ;
2132
+
2133
+ if ( mux -> data .base_nr == BUS3_BASE_NUM )
2134
+ {
2135
+ switch (chan ) {
2136
+ case 0 :
2137
+ swpld_mux_val = TEMP_FAN_VAL ;
2138
+ break ;
2139
+ case 1 :
2140
+ swpld_mux_val = FAN_EEPROM1_VAL ;
2141
+ break ;
2142
+ case 2 :
2143
+ swpld_mux_val = FAN_EEPROM2_VAL ;
2144
+ break ;
2145
+ case 3 :
2146
+ swpld_mux_val = FAN_EEPROM3_VAL ;
2147
+ break ;
2148
+ case 4 :
2149
+ swpld_mux_val = FAN_EEPROM4_VAL ;
2150
+ break ;
2151
+ case 5 :
2152
+ swpld_mux_val = FAN_EEPROM5_VAL ;
2153
+ break ;
2154
+ case 6 :
2155
+ swpld_mux_val = FANIO_CTL_VAL ;
2156
+ break ;
2157
+ case 7 :
2158
+ case 8 :
2159
+ swpld_mux_val = FAN_CTRL_VAL ;
2160
+ break ;
2161
+ }
2162
+ }
2163
+ else if ( mux -> data .base_nr == BUS4_BASE_NUM )
2164
+ {
2165
+ switch (chan ) {
2166
+ case 0 :
2167
+ swpld_mux_val = PSU1_VAL ;
2168
+ break ;
2169
+ case 1 :
2170
+ swpld_mux_val = PSU2_VAL ;
2171
+ break ;
2172
+ case 2 :
2173
+ swpld_mux_val = HOT_SWAP1_VAL ;
2174
+ break ;
2175
+ case 3 :
2176
+ swpld_mux_val = HOT_SWAP2_VAL ;
2177
+ break ;
2178
+ }
2179
+ }
2180
+ else if ( mux -> data .base_nr == BUS5_BASE_NUM ){
2181
+ if (chan < 9 ){
2182
+ swpld_mux_val = (u8 )(chan ) + 0x01 ;
2183
+ }
2184
+ else if (8 < chan && chan < 19 ){
2185
+ swpld_mux_val = (u8 )(chan - 9 ) + 0x10 ;
2186
+ }
2187
+ else if (18 < chan && chan < 29 ){
2188
+ swpld_mux_val = (u8 )(chan - 19 ) + 0x20 ;
2189
+ }
2190
+ else if (28 < chan && chan < 39 ){
2191
+ swpld_mux_val = (u8 )(chan - 29 ) + 0x30 ;
2192
+ }
2193
+ else {
2194
+ swpld_mux_val = 0x00 ;
2195
+ }
2196
+ }
2197
+ else
2198
+ {
2199
+ swpld_mux_val = 0x00 ;
2200
+ }
2201
+
2202
+ return cpld_reg_write_byte (mux -> data .cpld , mux -> data .reg_addr , (u8 )(swpld_mux_val & 0xff ));
2203
+ }
2204
+ #endif // #if LINUX_VERSION_CODE < KERNEL_VERSION(4,7,0)
2126
2205
2206
+ #if LINUX_VERSION_CODE < KERNEL_VERSION (4 ,7 ,0 )
2127
2207
static int __init swpld_mux_probe (struct platform_device * pdev )
2128
2208
{
2129
2209
struct swpld_mux * mux ;
@@ -2202,8 +2282,89 @@ static int __init swpld_mux_probe(struct platform_device *pdev)
2202
2282
2203
2283
return ret ;
2204
2284
}
2285
+ #else // #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0)
2286
+ static int __init swpld_mux_probe (struct platform_device * pdev )
2287
+ {
2288
+ struct i2c_mux_core * muxc ;
2289
+ struct swpld_mux * mux ;
2290
+ struct swpld_mux_platform_data * pdata ;
2291
+ struct i2c_adapter * parent ;
2292
+ int i , ret , dev_num ;
2293
+
2294
+ pdata = pdev -> dev .platform_data ;
2295
+ if (!pdata ) {
2296
+ dev_err (& pdev -> dev , "SWPLD platform data not found\n" );
2297
+ return - ENODEV ;
2298
+ }
2299
+
2300
+ mux = kzalloc (sizeof (* mux ), GFP_KERNEL );
2301
+ if (!mux ) {
2302
+ printk (KERN_ERR "Failed to allocate memory for mux\n" );
2303
+ return - ENOMEM ;
2304
+ }
2305
+ mux -> data = * pdata ;
2306
+
2307
+ parent = i2c_get_adapter (pdata -> parent );
2308
+ if (!parent ) {
2309
+ kfree (mux );
2310
+ dev_err (& pdev -> dev , "Parent adapter (%d) not found\n" , pdata -> parent );
2311
+ return - ENODEV ;
2312
+ }
2313
+
2314
+ /* Judge bus number to decide how many devices*/
2315
+ switch (pdata -> parent ) {
2316
+ case BUS3 :
2317
+ dev_num = BUS3_DEV_NUM ;
2318
+ break ;
2319
+ case BUS4 :
2320
+ dev_num = BUS4_DEV_NUM ;
2321
+ break ;
2322
+ case BUS5 :
2323
+ dev_num = BUS5_DEV_NUM ;
2324
+ break ;
2325
+ default :
2326
+ dev_num = DEFAULT_NUM ;
2327
+ break ;
2328
+ }
2329
+
2330
+
2331
+
2332
+ muxc = i2c_mux_alloc (parent , & pdev -> dev , dev_num , 0 , 0 ,
2333
+ swpld_mux_select , NULL );
2334
+ if (!muxc ) {
2335
+ ret = - ENOMEM ;
2336
+ goto alloc_failed ;
2337
+ }
2338
+ muxc -> priv = mux ;
2339
+ platform_set_drvdata (pdev , muxc );
2340
+
2341
+
2342
+ for (i = 0 ; i < dev_num ; i ++ ) {
2343
+ int nr = pdata -> base_nr + i ;
2344
+ unsigned int class = 0 ;
2345
+
2346
+ ret = i2c_mux_add_adapter (muxc , nr , i , class );
2347
+ if (ret ) {
2348
+ dev_err (& pdev -> dev , "Failed to add adapter %d\n" , i );
2349
+ goto add_adapter_failed ;
2350
+ }
2351
+ }
2205
2352
2353
+ dev_info (& pdev -> dev , "%d port mux on %s adapter\n" , dev_num , parent -> name );
2206
2354
2355
+ return 0 ;
2356
+
2357
+ add_adapter_failed :
2358
+ i2c_mux_del_adapters (muxc );
2359
+ alloc_failed :
2360
+ kfree (mux );
2361
+ i2c_put_adapter (parent );
2362
+
2363
+ return ret ;
2364
+ }
2365
+ #endif // #if LINUX_VERSION_CODE < KERNEL_VERSION(4,7,0)
2366
+
2367
+ #if LINUX_VERSION_CODE < KERNEL_VERSION (4 ,7 ,0 )
2207
2368
static int __exit swpld_mux_remove (struct platform_device * pdev )
2208
2369
{
2209
2370
int i ;
@@ -2249,6 +2410,18 @@ static int __exit swpld_mux_remove(struct platform_device *pdev)
2249
2410
2250
2411
return 0 ;
2251
2412
}
2413
+ #else // #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0)
2414
+ static int __exit swpld_mux_remove (struct platform_device * pdev )
2415
+ {
2416
+ struct i2c_mux_core * muxc = platform_get_drvdata (pdev );
2417
+ struct i2c_adapter * parent = muxc -> parent ;
2418
+
2419
+ i2c_mux_del_adapters (muxc );
2420
+ i2c_put_adapter (parent );
2421
+
2422
+ return 0 ;
2423
+ }
2424
+ #endif
2252
2425
2253
2426
static struct platform_driver swpld_mux_driver = {
2254
2427
.probe = swpld_mux_probe ,
@@ -2261,9 +2434,9 @@ static struct platform_driver swpld_mux_driver = {
2261
2434
/*---------------- MUX - end ------------- */
2262
2435
2263
2436
/*---------------- module initialization ------------- */
2264
- static void __init delta_ag9032v1_platform_init (void )
2437
+ static int __init delta_ag9032v1_platform_init (void )
2265
2438
{
2266
- struct i2c_client * client ;
2439
+ // struct i2c_client *client;
2267
2440
struct i2c_adapter * adapter ;
2268
2441
struct cpld_platform_data * cpld_pdata ;
2269
2442
struct swpld_mux_platform_data * swpld_mux_pdata ;
@@ -2342,7 +2515,7 @@ static void __init delta_ag9032v1_platform_init(void)
2342
2515
for (; i >= 0 ; i -- ) {
2343
2516
platform_device_unregister (& ag9032v1_swpld_mux [i ]);
2344
2517
}
2345
- platform_driver_unregister (& ag9032v1_cpld );
2518
+ platform_driver_unregister (( struct platform_driver * ) & ag9032v1_cpld );
2346
2519
error_ag9032v1_cpld :
2347
2520
platform_driver_unregister (& i2c_device_driver );
2348
2521
error_i2c_device_driver :
0 commit comments