Skip to content

Commit d1a247e

Browse files
author
Jostar Yang
committed
Fix I2C bus order and cpld, led drv
1 parent 9318f6c commit d1a247e

File tree

4 files changed

+107
-41
lines changed

4 files changed

+107
-41
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
CONSOLE_PORT=0x3f8
22
CONSOLE_DEV=0
33
CONSOLE_SPEED=115200
4+
ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="modprobe.blacklist=i2c-ismt,i2c_ismt,i2c-i801,i2c_i801"

platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/x86-64-accton-as4630-54pe-cpld.c

Lines changed: 89 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,16 @@ static const struct i2c_device_id as4630_54pe_cpld_id[] = {
9696
};
9797
MODULE_DEVICE_TABLE(i2c, as4630_54pe_cpld_id);
9898

99-
#define TRANSCEIVER_PRESENT_ATTR_ID(index) MODULE_PRESENT_##index
99+
#define TRANSCEIVER_RESET_ATTR_ID(index) MODULE_RESET_##index
100+
#define TRANSCEIVER_LPMODE_ATTR_ID(index) MODULE_LPMODE_##index
101+
#define TRANSCEIVER_PRESENT_ATTR_ID(index) MODULE_PRESENT_##index
100102
#define TRANSCEIVER_TXDISABLE_ATTR_ID(index) MODULE_TXDISABLE_##index
101-
#define TRANSCEIVER_RXLOS_ATTR_ID(index) MODULE_RXLOS_##index
102-
#define TRANSCEIVER_TXFAULT_ATTR_ID(index) MODULE_TXFAULT_##index
103+
#define TRANSCEIVER_RXLOS_ATTR_ID(index) MODULE_RXLOS_##index
104+
#define TRANSCEIVER_TXFAULT_ATTR_ID(index) MODULE_TXFAULT_##index
103105
#define FAN_SPEED_RPM_ATTR_ID(index) FAN_SPEED_RPM_##index
104-
#define FAN_DIRECTION_ID(index) FAN_DIRECTION_##index
106+
#define FAN_DIRECTION_ID(index) FAN_DIRECTION_##index
105107
#define FAN_PRESENT_ATTR_ID(index) FAN_PRESENT_##index
106-
#define FAN_FAULT_ATTR_ID(index) FAN_FAULT_##index
108+
#define FAN_FAULT_ATTR_ID(index) FAN_FAULT_##index
107109

108110
enum as4630_54pe_cpld_sysfs_attributes {
109111
CPLD_VERSION,
@@ -123,6 +125,10 @@ enum as4630_54pe_cpld_sysfs_attributes {
123125
TRANSCEIVER_PRESENT_ATTR_ID(52),
124126
TRANSCEIVER_PRESENT_ATTR_ID(53),
125127
TRANSCEIVER_PRESENT_ATTR_ID(54),
128+
TRANSCEIVER_RESET_ATTR_ID(53),
129+
TRANSCEIVER_RESET_ATTR_ID(54),
130+
TRANSCEIVER_LPMODE_ATTR_ID(53),
131+
TRANSCEIVER_LPMODE_ATTR_ID(54),
126132
TRANSCEIVER_TXDISABLE_ATTR_ID(49),
127133
TRANSCEIVER_TXDISABLE_ATTR_ID(50),
128134
TRANSCEIVER_TXDISABLE_ATTR_ID(51),
@@ -148,6 +154,8 @@ static ssize_t show_status(struct device *dev, struct device_attribute *da,
148154
char *buf);
149155
static ssize_t set_tx_disable(struct device *dev, struct device_attribute *da,
150156
const char *buf, size_t count);
157+
static ssize_t set_qsfp(struct device *dev, struct device_attribute *da,
158+
const char *buf, size_t count);
151159
static ssize_t access(struct device *dev, struct device_attribute *da,
152160
const char *buf, size_t count);
153161
static ssize_t show_version(struct device *dev, struct device_attribute *da,
@@ -161,10 +169,6 @@ static ssize_t fan_show_value(struct device *dev, struct device_attribute *da, c
161169
static ssize_t set_duty_cycle(struct device *dev, struct device_attribute *da,
162170
const char *buf, size_t count);
163171
static ssize_t get_sys_temp(struct device *dev, struct device_attribute *da, char *buf);
164-
//static ssize_t show_power(struct device *dev, struct device_attribute *da,
165-
// char *buf);
166-
167-
168172

169173
/* transceiver attributes */
170174
#define DECLARE_SFP_TRANSCEIVER_SENSOR_DEVICE_ATTR(index) \
@@ -178,11 +182,15 @@ static ssize_t get_sys_temp(struct device *dev, struct device_attribute *da, cha
178182
&sensor_dev_attr_module_tx_disable_##index.dev_attr.attr, \
179183
&sensor_dev_attr_module_rx_los_##index.dev_attr.attr, \
180184
&sensor_dev_attr_module_tx_fault_##index.dev_attr.attr
181-
185+
182186
#define DECLARE_QSFP_TRANSCEIVER_SENSOR_DEVICE_ATTR(index) \
187+
static SENSOR_DEVICE_ATTR(module_lpmode_##index, S_IRUGO | S_IWUSR, show_status, set_qsfp, MODULE_LPMODE_##index); \
188+
static SENSOR_DEVICE_ATTR(module_reset_##index, S_IRUGO | S_IWUSR, show_status, set_qsfp, MODULE_RESET_##index); \
183189
static SENSOR_DEVICE_ATTR(module_present_##index, S_IRUGO, show_status, NULL, MODULE_PRESENT_##index);
184190

185191
#define DECLARE_QSFP_TRANSCEIVER_ATTR(index) \
192+
&sensor_dev_attr_module_lpmode_##index.dev_attr.attr, \
193+
&sensor_dev_attr_module_reset_##index.dev_attr.attr, \
186194
&sensor_dev_attr_module_present_##index.dev_attr.attr
187195

188196

@@ -273,7 +281,7 @@ static ssize_t show_status(struct device *dev, struct device_attribute *da,
273281
break;
274282
case MODULE_TXDISABLE_49 ... MODULE_TXDISABLE_50:
275283
reg=0x5;
276-
mask=0x1 << (attr->index==MODULE_TXFAULT_49?7:3);
284+
mask=0x1 << (attr->index==MODULE_TXDISABLE_49?7:3);
277285
break;
278286

279287
case MODULE_RXLOS_51 ... MODULE_RXLOS_52:
@@ -290,12 +298,22 @@ static ssize_t show_status(struct device *dev, struct device_attribute *da,
290298
break;
291299
case MODULE_TXDISABLE_51 ... MODULE_TXDISABLE_52:
292300
reg=0x6;
293-
mask=0x1 << (attr->index==MODULE_TXFAULT_51?7:3);
301+
mask=0x1 << (attr->index==MODULE_TXDISABLE_51?7:3);
294302
break;
295303
case MODULE_PRESENT_53 ... MODULE_PRESENT_54:
296304
reg=0x21;
297305
mask=0x1 << (attr->index==MODULE_PRESENT_53?0:4);
298306
break;
307+
case MODULE_RESET_53 ... MODULE_RESET_54:
308+
reg=0x21;
309+
mask=0x1 << (attr->index==MODULE_RESET_53?3:7);
310+
revert = 1;
311+
break;
312+
case MODULE_LPMODE_53 ... MODULE_LPMODE_54:
313+
reg = 0x21;
314+
mask = 0x1 << (attr->index==MODULE_LPMODE_53?2:6);
315+
revert = 0;
316+
break;
299317
default:
300318
return 0;
301319
}
@@ -319,6 +337,61 @@ static ssize_t show_status(struct device *dev, struct device_attribute *da,
319337
return status;
320338
}
321339

340+
static ssize_t set_qsfp(struct device *dev, struct device_attribute *da,
341+
const char *buf, size_t count)
342+
{
343+
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
344+
struct i2c_client *client = to_i2c_client(dev);
345+
struct as4630_54pe_cpld_data *data = i2c_get_clientdata(client);
346+
long disable;
347+
int status;
348+
u8 reg = 0, mask = 0, revert = 0;
349+
350+
status = kstrtol(buf, 10, &disable);
351+
if (status) {
352+
return status;
353+
}
354+
reg = 0x21;
355+
switch (attr->index)
356+
{
357+
case MODULE_RESET_53 ... MODULE_RESET_54:
358+
mask=0x1 << (attr->index==MODULE_RESET_53?3:7);
359+
revert = 1;
360+
break;
361+
case MODULE_LPMODE_53 ... MODULE_LPMODE_54:
362+
mask=0x1 << (attr->index==MODULE_LPMODE_53?2:6);
363+
revert = 0;
364+
break;
365+
default:
366+
return 0;
367+
}
368+
369+
disable = revert ? disable : !disable;
370+
/* Read current status */
371+
mutex_lock(&data->update_lock);
372+
status = as4630_54pe_cpld_read_internal(client, reg);
373+
if (unlikely(status < 0)) {
374+
goto exit;
375+
}
376+
if (disable) {
377+
status &= ~mask;
378+
}
379+
else {
380+
status |= mask;
381+
}
382+
status = as4630_54pe_cpld_write_internal(client, reg, status);
383+
if (unlikely(status < 0)) {
384+
goto exit;
385+
}
386+
387+
mutex_unlock(&data->update_lock);
388+
return count;
389+
390+
exit:
391+
mutex_unlock(&data->update_lock);
392+
return status;
393+
}
394+
322395
static ssize_t set_tx_disable(struct device *dev, struct device_attribute *da,
323396
const char *buf, size_t count)
324397
{
@@ -338,11 +411,11 @@ static ssize_t set_tx_disable(struct device *dev, struct device_attribute *da,
338411
{
339412
case MODULE_TXDISABLE_49 ... MODULE_TXDISABLE_50:
340413
reg=0x5;
341-
mask=0x1 << (attr->index==MODULE_TXFAULT_49?7:3);
414+
mask=0x1 << (attr->index==MODULE_TXDISABLE_49?7:3);
342415
break;
343416
case MODULE_TXDISABLE_51 ... MODULE_TXDISABLE_52:
344417
reg=0x6;
345-
mask=0x1 << (attr->index==MODULE_TXFAULT_51?7:3);
418+
mask=0x1 << (attr->index==MODULE_TXDISABLE_51?7:3);
346419
break;
347420

348421
default:
@@ -357,10 +430,10 @@ static ssize_t set_tx_disable(struct device *dev, struct device_attribute *da,
357430
}
358431
/* Update tx_disable status */
359432
if (disable) {
360-
status &= ~mask;
433+
status |= mask;
361434
}
362435
else {
363-
status |= mask;
436+
status &= ~mask;
364437
}
365438
status = as4630_54pe_cpld_write_internal(client, reg, status);
366439
if (unlikely(status < 0)) {

platform/broadcom/sonic-platform-modules-accton/as4630-54pe/modules/x86-64-accton-as4630-54pe-leds.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ static struct accton_as4630_54pe_led_data *ledctl = NULL;
6464
#define LED_TYPE_POE_REG_MASK (0x2|0x1)
6565
#define LED_MODE_POE_GREEN_VALUE 0x1
6666
#define LED_MODE_POE_AMBER_VALUE 0x2
67-
#define LED_MODE_POE_OFF_VALUE 0x0
67+
#define LED_MODE_POE_OFF_VALUE 0x3
6868

6969
#define LED_TYPE_STK1_REG_MASK 0x20
7070
#define LED_MODE_STK1_GREEN_VALUE 0x0
@@ -74,20 +74,20 @@ static struct accton_as4630_54pe_led_data *ledctl = NULL;
7474
#define LED_MODE_STK2_GREEN_VALUE 0x0
7575
#define LED_MODE_STK2_OFF_VALUE 0x10
7676

77-
#define LED_TYPE_FAN_REG_MASK (0x20|0x10)
78-
#define LED_MODE_FAN_AMBER_VALUE 0x20
79-
#define LED_MODE_FAN_GREEN_VALUE 0x10
80-
#define LED_MODE_FAN_OFF_VALUE (0x0)
77+
#define LED_TYPE_FAN_REG_MASK (0x8|0x4)
78+
#define LED_MODE_FAN_AMBER_VALUE 0x8
79+
#define LED_MODE_FAN_GREEN_VALUE 0x4
80+
#define LED_MODE_FAN_OFF_VALUE (0xC)
8181

82-
#define LED_TYPE_PSU2_REG_MASK (0x8|0x4)
83-
#define LED_MODE_PSU2_AMBER_VALUE 0x8
84-
#define LED_MODE_PSU2_GREEN_VALUE 0x4
85-
#define LED_MODE_PSU2_OFF_VALUE (0x0)
82+
#define LED_TYPE_PSU2_REG_MASK (0x80|0x40)
83+
#define LED_MODE_PSU2_AMBER_VALUE 0x80
84+
#define LED_MODE_PSU2_GREEN_VALUE 0x40
85+
#define LED_MODE_PSU2_OFF_VALUE (0xC0)
8686

8787
#define LED_TYPE_PSU1_REG_MASK (0x2|0x1)
8888
#define LED_MODE_PSU1_AMBER_VALUE 0x2
8989
#define LED_MODE_PSU1_GREEN_VALUE 0x1
90-
#define LED_MODE_PSU1_OFF_VALUE (0x0)
90+
#define LED_MODE_PSU1_OFF_VALUE (0x3)
9191

9292
enum led_type {
9393
LED_TYPE_DIAG,
@@ -106,8 +106,8 @@ struct led_reg {
106106
};
107107

108108
static const struct led_reg led_reg_map[] = {
109-
{(1<<LED_TYPE_DIAG)| (1<<LED_TYPE_PRI) | (1<<LED_TYPE_PSU2) , 0x30},
110-
{(1<<LED_TYPE_PSU1) | (1<<LED_TYPE_FAN) | (1<<LED_TYPE_POE) |(1<<LED_TYPE_STK1) | (1<<LED_TYPE_STK2) , 0x31},
109+
{(1<<LED_TYPE_DIAG)| (1<<LED_TYPE_PRI) | (1<<LED_TYPE_PSU1) , 0x30},
110+
{(1<<LED_TYPE_PSU2) | (1<<LED_TYPE_FAN) | (1<<LED_TYPE_POE) |(1<<LED_TYPE_STK1) | (1<<LED_TYPE_STK2) , 0x31},
111111
};
112112

113113

@@ -371,7 +371,7 @@ static void accton_as4630_54pe_led_fan_set(struct led_classdev *led_cdev,
371371
static enum led_brightness accton_as4630_54pe_led_fan_get(struct led_classdev *cdev)
372372
{
373373
accton_as4630_54pe_led_update();
374-
return led_reg_val_to_light_mode(LED_TYPE_FAN, ledctl->reg_val[0]);
374+
return led_reg_val_to_light_mode(LED_TYPE_FAN, ledctl->reg_val[1]);
375375
}
376376

377377
static void accton_as4630_54pe_led_psu1_set(struct led_classdev *led_cdev,
@@ -395,7 +395,7 @@ static void accton_as4630_54pe_led_psu2_set(struct led_classdev *led_cdev,
395395
static enum led_brightness accton_as4630_54pe_led_psu2_get(struct led_classdev *cdev)
396396
{
397397
accton_as4630_54pe_led_update();
398-
return led_reg_val_to_light_mode(LED_TYPE_PSU2, ledctl->reg_val[0]);
398+
return led_reg_val_to_light_mode(LED_TYPE_PSU2, ledctl->reg_val[1]);
399399
}
400400

401401
static struct led_classdev accton_as4630_54pe_leds[] = {
@@ -405,7 +405,7 @@ static struct led_classdev accton_as4630_54pe_leds[] = {
405405
.brightness_set = accton_as4630_54pe_led_diag_set,
406406
.brightness_get = accton_as4630_54pe_led_diag_get,
407407
.flags = LED_CORE_SUSPENDRESUME,
408-
.max_brightness = LED_MODE_GREEN,
408+
.max_brightness = LED_MODE_GREEN_BLINK,
409409
},
410410
[LED_TYPE_PRI] = {
411411
.name = "pri",

platform/broadcom/sonic-platform-modules-accton/as4630-54pe/utils/accton_as4630_54pe_util.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ def driver_inserted():
173173
kos = [
174174
'depmod -ae',
175175
'modprobe i2c_dev',
176+
'modprobe i2c_i801',
177+
'modprobe i2c_ismt',
176178
'modprobe i2c_mux_pca954x force_deselect_on_exit=1',
177179
'modprobe ym2651y',
178180
'modprobe x86_64_accton_as4630_54pe_cpld',
@@ -183,16 +185,6 @@ def driver_inserted():
183185
def driver_install():
184186
global FORCE
185187

186-
ret=log_os_system("lsmod|grep i2c_ismt",1)
187-
my_log("rmmond i2cismt")
188-
log_os_system("rmmod i2c_ismt", 1)
189-
log_os_system("rmmod i2c_i801", 1)
190-
log_os_system("modprobe i2c-i801", 1)
191-
time.sleep(1)
192-
log_os_system("modprobe i2c-ismt", 1)
193-
194-
195-
196188
for i in range(0,len(kos)):
197189
status, output = log_os_system(kos[i], 1)
198190
if status:

0 commit comments

Comments
 (0)