@@ -248,25 +248,25 @@ static struct i2c_device_platform_data ag9032v1_i2c_device_platform_data[] = {
248248 {
249249 /* psu 1 (0x58) */
250250 .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 },
252252 .client = NULL ,
253253 },
254254 {
255255 /* psu 2 (0x58) */
256256 .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 },
258258 .client = NULL ,
259259 },
260260 {
261261 /* hot-swap 1 (0x40) */
262262 .parent = 42 ,
263- .info = { .type = "ltc4215" , .addr = 0x40 , .platform_data = 0 },
263+ .info = { .type = "ltc4215" , .addr = 0x40 , .platform_data = ( void * ) 0 },
264264 .client = NULL ,
265265 },
266266 {
267267 /* hot-swap 2 (0x40) */
268268 .parent = 43 ,
269- .info = { .type = "ltc4215" , .addr = 0x40 , .platform_data = 1 },
269+ .info = { .type = "ltc4215" , .addr = 0x40 , .platform_data = ( void * ) 1 },
270270 .client = NULL ,
271271 },
272272 {
@@ -1043,22 +1043,22 @@ static ssize_t get_present(struct device *dev, struct device_attribute \
10431043
10441044 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_PRESENCE_1 );
10451045 if (ret < 0 )
1046- return sprintf (buf , "error number(%ld )" ,ret );
1046+ return sprintf (buf , "error number(%d )" ,ret );
10471047 data = (u32 )reverse_8bits (ret ) & 0xff ;
10481048
10491049 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_PRESENCE_2 );
10501050 if (ret < 0 )
1051- return sprintf (buf , "error number(%ld )" ,ret );
1051+ return sprintf (buf , "error number(%d )" ,ret );
10521052 data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 8 ;
10531053
10541054 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_PRESENCE_3 );
10551055 if (ret < 0 )
1056- return sprintf (buf , "error number(%ld )" ,ret );
1056+ return sprintf (buf , "error number(%d )" ,ret );
10571057 data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 16 ;
10581058
10591059 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_PRESENCE_4 );
10601060 if (ret < 0 )
1061- return sprintf (buf , "error number(%ld )" ,ret );
1061+ return sprintf (buf , "error number(%d )" ,ret );
10621062 data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 24 ;
10631063
10641064 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,
10721072
10731073 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_LP_MODE_1 );
10741074 if (ret < 0 )
1075- return sprintf (buf , "error number(%ld )" ,ret );
1075+ return sprintf (buf , "error number(%d )" ,ret );
10761076 data = (u32 )(reverse_8bits (ret ) & 0xff );
10771077
10781078 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_LP_MODE_2 );
10791079 if (ret < 0 )
1080- return sprintf (buf , "error number(%ld )" ,ret );
1080+ return sprintf (buf , "error number(%d )" ,ret );
10811081 data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 8 ;
10821082
10831083 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_LP_MODE_3 );
10841084 if (ret < 0 )
1085- return sprintf (buf , "error number(%ld )" ,ret );
1085+ return sprintf (buf , "error number(%d )" ,ret );
10861086 data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 16 ;
10871087
10881088 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_LP_MODE_4 );
10891089 if (ret < 0 )
1090- return sprintf (buf , "error number(%ld )" ,ret );
1090+ return sprintf (buf , "error number(%d )" ,ret );
10911091 data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 24 ;
10921092
10931093 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
11191119
11201120 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESET_1 );
11211121 if (ret < 0 )
1122- return sprintf (buf , "error number(%ld )" ,ret );
1122+ return sprintf (buf , "error number(%d )" ,ret );
11231123 data = (u32 )(reverse_8bits (ret ) & 0xff );
11241124
11251125 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESET_2 );
11261126 if (ret < 0 )
1127- return sprintf (buf , "error number(%ld )" ,ret );
1127+ return sprintf (buf , "error number(%d )" ,ret );
11281128 data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 8 ;
11291129
11301130 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESET_3 );
11311131 if (ret < 0 )
1132- return sprintf (buf , "error number(%ld )" ,ret );
1132+ return sprintf (buf , "error number(%d )" ,ret );
11331133 data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 16 ;
11341134
11351135 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESET_4 );
11361136 if (ret < 0 )
1137- return sprintf (buf , "error number(%ld )" ,ret );
1137+ return sprintf (buf , "error number(%d )" ,ret );
11381138 data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 24 ;
11391139
11401140 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
11661166
11671167 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESPONSE_1 );
11681168 if (ret < 0 )
1169- return sprintf (buf , "error number(%ld )" ,ret );
1169+ return sprintf (buf , "error number(%d )" ,ret );
11701170 data = (u32 )(reverse_8bits (ret ) & 0xff );
11711171
11721172 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESPONSE_2 );
11731173 if (ret < 0 )
1174- return sprintf (buf , "error number(%ld )" ,ret );
1174+ return sprintf (buf , "error number(%d )" ,ret );
11751175 data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 8 ;
11761176
11771177 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESPONSE_3 );
11781178 if (ret < 0 )
1179- return sprintf (buf , "error number(%ld )" ,ret );
1179+ return sprintf (buf , "error number(%d )" ,ret );
11801180 data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 16 ;
11811181
11821182 ret = i2c_smbus_read_byte_data (pdata [system_cpld ].client , SFP_RESPONSE_4 );
11831183 if (ret < 0 )
1184- return sprintf (buf , "error number(%ld )" ,ret );
1184+ return sprintf (buf , "error number(%d )" ,ret );
11851185 data |= (u32 )(reverse_8bits (ret ) & 0xff ) << 24 ;
11861186
11871187 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)
20482048 regaddr , I2C_SMBUS_BYTE_DATA , & data );
20492049}
20502050
2051+ #if LINUX_VERSION_CODE < KERNEL_VERSION (4 ,7 ,0 )
20512052static int swpld_mux_select (struct i2c_adapter * adap , void * data , u8 chan )
20522053{
20532054 struct swpld_mux * mux = data ;
@@ -2123,7 +2124,86 @@ static int swpld_mux_select(struct i2c_adapter *adap, void *data, u8 chan)
21232124 }
21242125 return cpld_reg_write_byte (mux -> data .cpld , mux -> data .reg_addr , (u8 )(swpld_mux_val & 0xff ));
21252126}
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)
21262205
2206+ #if LINUX_VERSION_CODE < KERNEL_VERSION (4 ,7 ,0 )
21272207static int __init swpld_mux_probe (struct platform_device * pdev )
21282208{
21292209 struct swpld_mux * mux ;
@@ -2202,8 +2282,89 @@ static int __init swpld_mux_probe(struct platform_device *pdev)
22022282
22032283 return ret ;
22042284}
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+ }
22052352
2353+ dev_info (& pdev -> dev , "%d port mux on %s adapter\n" , dev_num , parent -> name );
22062354
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 )
22072368static int __exit swpld_mux_remove (struct platform_device * pdev )
22082369{
22092370 int i ;
@@ -2249,6 +2410,18 @@ static int __exit swpld_mux_remove(struct platform_device *pdev)
22492410
22502411 return 0 ;
22512412}
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
22522425
22532426static struct platform_driver swpld_mux_driver = {
22542427 .probe = swpld_mux_probe ,
@@ -2261,9 +2434,9 @@ static struct platform_driver swpld_mux_driver = {
22612434/*---------------- MUX - end ------------- */
22622435
22632436/*---------------- module initialization ------------- */
2264- static void __init delta_ag9032v1_platform_init (void )
2437+ static int __init delta_ag9032v1_platform_init (void )
22652438{
2266- struct i2c_client * client ;
2439+ // struct i2c_client *client;
22672440 struct i2c_adapter * adapter ;
22682441 struct cpld_platform_data * cpld_pdata ;
22692442 struct swpld_mux_platform_data * swpld_mux_pdata ;
@@ -2342,7 +2515,7 @@ static void __init delta_ag9032v1_platform_init(void)
23422515 for (; i >= 0 ; i -- ) {
23432516 platform_device_unregister (& ag9032v1_swpld_mux [i ]);
23442517 }
2345- platform_driver_unregister (& ag9032v1_cpld );
2518+ platform_driver_unregister (( struct platform_driver * ) & ag9032v1_cpld );
23462519error_ag9032v1_cpld :
23472520 platform_driver_unregister (& i2c_device_driver );
23482521error_i2c_device_driver :
0 commit comments