From 118fa0254fc753708eba8fb9511975898bfbffaf Mon Sep 17 00:00:00 2001 From: Wirut Getbamrung Date: Tue, 28 Sep 2021 11:48:46 +0700 Subject: [PATCH 1/6] [device/celestica-blackstone]: disable cpld2 in switch cpld driver --- .../blackstone/modules/switch_cpld.c | 152 +++++++++--------- 1 file changed, 76 insertions(+), 76 deletions(-) diff --git a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c index 3a1b7669547f..885670bbbfa7 100644 --- a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c +++ b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c @@ -2,8 +2,6 @@ * switch_cpld.c - i2c driver for Blackstone DP switchboard CPLD1/CPLD2 * provides sysfs interfaces to access CPLD register and control port LEDs * - * Author: Budsakol Sirirattanasakul - * * Copyright (C) 2021 Celestica Corp. * * This program is free software; you can redistribute it and/or modify @@ -30,7 +28,7 @@ struct switch_cpld_data { struct mutex lock; struct i2c_client *client; - struct i2c_client *client2; + // struct i2c_client *client2; uint8_t read_addr; }; @@ -142,15 +140,15 @@ static ssize_t port_led_mode_show(struct device *dev, int led_mode_1, led_mode_2; struct switch_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client1 = data->client; - struct i2c_client *client2 = data->client2; + // struct i2c_client *client2 = data->client2; led_mode_1 = i2c_smbus_read_byte_data(client1, LED_OPMODE); if (led_mode_1 < 0) return led_mode_1; - led_mode_2 = i2c_smbus_read_byte_data(client2, LED_OPMODE); - if (led_mode_2 < 0) - return led_mode_2; + // led_mode_2 = i2c_smbus_read_byte_data(client2, LED_OPMODE); + // if (led_mode_2 < 0) + // return led_mode_2; return sprintf(buf, "%s %s\n", led_mode_1 ? "test" : "normal", @@ -165,7 +163,7 @@ static ssize_t port_led_mode_store(struct device *dev, uint8_t led_mode; struct switch_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client1 = data->client; - struct i2c_client *client2 = data->client2; + // struct i2c_client *client2 = data->client2; if (sysfs_streq(buf, "test")) led_mode = 0x01; @@ -179,10 +177,10 @@ static ssize_t port_led_mode_store(struct device *dev, return status; } - status = i2c_smbus_write_byte_data(client2, LED_OPMODE, led_mode); - if (status != 0) { - return status; - } + // status = i2c_smbus_write_byte_data(client2, LED_OPMODE, led_mode); + // if (status != 0) { + // return status; + // } return size; } @@ -193,15 +191,15 @@ static ssize_t port_led_color_show(struct device *dev, int led_color1, led_color2; struct switch_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client1 = data->client; - struct i2c_client *client2 = data->client2; + // struct i2c_client *client2 = data->client2; led_color1 = i2c_smbus_read_byte_data(client1, LED_TEST); if (led_color1 < 0) return led_color1; - led_color2 = i2c_smbus_read_byte_data(client2, LED_TEST); - if (led_color2 < 0) - return led_color2; + // led_color2 = i2c_smbus_read_byte_data(client2, LED_TEST); + // if (led_color2 < 0) + // return led_color2; return sprintf(buf, "%s %s\n", led_color1 == 0x02 ? "green" : @@ -224,7 +222,7 @@ static ssize_t port_led_color_store(struct device *dev, uint8_t led_color1, led_color2; struct switch_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client1 = data->client; - struct i2c_client *client2 = data->client2; + // struct i2c_client *client2 = data->client2; if (sysfs_streq(buf, "off")) { led_color1 = 0x07; @@ -259,10 +257,10 @@ static ssize_t port_led_color_store(struct device *dev, return status; } - status = i2c_smbus_write_byte_data(client2, LED_TEST, led_color2); - if (status != 0) { - return status; - } + // status = i2c_smbus_write_byte_data(client2, LED_TEST, led_color2); + // if (status != 0) { + // return status; + // } return size; } @@ -286,14 +284,14 @@ static int switch_cpld_probe(struct i2c_client *client, int err; struct switch_cpld_data *drvdata1, *drvdata2; struct device *hwmon_dev1, *hwmon_dev2; - struct i2c_client *client2; + // struct i2c_client *client2; - if (client->addr != CPLD1_ADDR) { - dev_err(&client->dev, "probe, bad i2c addr: 0x%x\n", - client->addr); - err = -EINVAL; - goto exit; - } + // if (client->addr != CPLD1_ADDR) { + // dev_err(&client->dev, "probe, bad i2c addr: 0x%x\n", + // client->addr); + // err = -EINVAL; + // goto exit; + // } if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) return -EPFNOSUPPORT; @@ -326,63 +324,64 @@ static int switch_cpld_probe(struct i2c_client *client, goto exit; } - /* CPLD2 */ - drvdata2 = devm_kzalloc(&client->dev, - sizeof(struct switch_cpld_data), GFP_KERNEL); - - if (!drvdata2) { - err = -ENOMEM; - goto err_link; - } - - client2 = i2c_new_dummy(client->adapter, CPLD2_ADDR); - if (!client2) { - dev_err(&client->dev, "address 0x%02x unavailable\n", - CPLD2_ADDR); - err = -EADDRINUSE; - goto err_link; - } - - mutex_init(&drvdata2->lock); - drvdata2->read_addr = 0x00; - drvdata2->client = client2; - i2c_set_clientdata(client2, drvdata2); - - /* attach client2 to be client2 of CPLD1 - for later use on port led sysfs */ - drvdata1->client2 = client2; - - hwmon_dev2 = devm_hwmon_device_register_with_groups(&client2->dev, - "CPLD2", - drvdata2, - switch_cpld_groups); - - if (IS_ERR(hwmon_dev2)) { - err = PTR_ERR(hwmon_dev2); - goto err_client2; - } - - err = sysfs_create_link(&client->dev.kobj, &hwmon_dev2->kobj, "CPLD2"); - if (err) { - goto err_client2; - } + // /* CPLD2 */ + // drvdata2 = devm_kzalloc(&client->dev, + // sizeof(struct switch_cpld_data), GFP_KERNEL); + + // if (!drvdata2) { + // err = -ENOMEM; + // goto err_link; + // } + + // client2 = i2c_new_dummy(client->adapter, CPLD2_ADDR); + // if (!client2) { + // dev_err(&client->dev, "address 0x%02x unavailable\n", + // CPLD2_ADDR); + // err = -EADDRINUSE; + // goto err_link; + // } + + // mutex_init(&drvdata2->lock); + // drvdata2->read_addr = 0x00; + // drvdata2->client = client2; + // i2c_set_clientdata(client2, drvdata2); + + // /* attach client2 to be client2 of CPLD1 + // for later use on port led sysfs */ + // drvdata1->client2 = client2; + + // hwmon_dev2 = devm_hwmon_device_register_with_groups(&client2->dev, + // "CPLD2", + // drvdata2, + // switch_cpld_groups); + + // if (IS_ERR(hwmon_dev2)) { + // err = PTR_ERR(hwmon_dev2); + // goto err_client2; + // } + + // err = sysfs_create_link(&client->dev.kobj, &hwmon_dev2->kobj, "CPLD2"); + // if (err) { + // goto err_client2; + // } //port led err = sysfs_create_group(&client->dev.kobj, &sff_led_groups); if (err) { dev_err(&client->dev, "failed to create sysfs attribute group.\n"); - goto err_link2; + // goto err_link2; + goto err_link; } return 0; -err_link2: - sysfs_remove_link(&client->dev.kobj, "CPLD2"); +// err_link2: +// sysfs_remove_link(&client->dev.kobj, "CPLD2"); -err_client2: - if (client2) - i2c_unregister_device(client2); +// err_client2: +// if (client2) +// i2c_unregister_device(client2); err_link: sysfs_remove_link(&client->dev.kobj, "CPLD1"); @@ -397,9 +396,9 @@ static int switch_cpld_remove(struct i2c_client *client) struct switch_cpld_data *data = i2c_get_clientdata(client); sysfs_remove_group(&client->dev.kobj, &sff_led_groups); - sysfs_remove_link(&data->client->dev.kobj, "CPLD2"); + // sysfs_remove_link(&data->client->dev.kobj, "CPLD2"); sysfs_remove_link(&client->dev.kobj, "CPLD1"); - i2c_unregister_device(data->client2); + // i2c_unregister_device(data->client2); return 0; } @@ -423,6 +422,7 @@ static struct i2c_driver switch_cpld_driver = { module_i2c_driver(switch_cpld_driver); MODULE_AUTHOR("Budsakol Sirirattanasakul"); +MODULE_AUTHOR("Wirut Getbamrung"); MODULE_DESCRIPTION("Celestica Blackstone Switchboard CPLD driver"); MODULE_VERSION("1.0.0"); MODULE_LICENSE("GPL"); From b580af1e1d250a64c078220b3e02b472a3de13b5 Mon Sep 17 00:00:00 2001 From: Wirut Getbamrung Date: Tue, 28 Sep 2021 14:42:07 +0700 Subject: [PATCH 2/6] [platform/cel-blackstone]: remove unuse command on switch CPLD driver --- .../blackstone/modules/switch_cpld.c | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c index 885670bbbfa7..7dbc529e9e0c 100644 --- a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c +++ b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c @@ -15,18 +15,18 @@ #include #include #include -#include +// #include #include #define CPLD1_ADDR 0x30 -#define CPLD2_ADDR 0x31 +// #define CPLD2_ADDR 0x31 #define SCRATCH_ADDR 0x01 #define LED_OPMODE 0x09 #define LED_TEST 0x0A struct switch_cpld_data { - struct mutex lock; + // struct mutex lock; struct i2c_client *client; // struct i2c_client *client2; uint8_t read_addr; @@ -283,7 +283,7 @@ static int switch_cpld_probe(struct i2c_client *client, { int err; struct switch_cpld_data *drvdata1, *drvdata2; - struct device *hwmon_dev1, *hwmon_dev2; + struct device *hwmon_dev1;//, *hwmon_dev2; // struct i2c_client *client2; // if (client->addr != CPLD1_ADDR) { @@ -305,7 +305,7 @@ static int switch_cpld_probe(struct i2c_client *client, goto exit; } - mutex_init(&drvdata1->lock); + // mutex_init(&drvdata1->lock); drvdata1->client = client; drvdata1->read_addr = 0x00; i2c_set_clientdata(client, drvdata1); @@ -319,10 +319,10 @@ static int switch_cpld_probe(struct i2c_client *client, goto exit; } - err = sysfs_create_link(&client->dev.kobj, &hwmon_dev1->kobj, "CPLD1"); - if (err) { - goto exit; - } + // err = sysfs_create_link(&client->dev.kobj, &hwmon_dev1->kobj, "CPLD1"); + // if (err) { + // goto exit; + // } // /* CPLD2 */ // drvdata2 = devm_kzalloc(&client->dev, @@ -384,7 +384,7 @@ static int switch_cpld_probe(struct i2c_client *client, // i2c_unregister_device(client2); err_link: - sysfs_remove_link(&client->dev.kobj, "CPLD1"); + sysfs_remove_link(&client->dev.kobj, "CPLD"); exit: dev_err(&client->dev, "probe error %d\n", err); @@ -397,13 +397,13 @@ static int switch_cpld_remove(struct i2c_client *client) sysfs_remove_group(&client->dev.kobj, &sff_led_groups); // sysfs_remove_link(&data->client->dev.kobj, "CPLD2"); - sysfs_remove_link(&client->dev.kobj, "CPLD1"); + sysfs_remove_link(&client->dev.kobj, "CPLD"); // i2c_unregister_device(data->client2); return 0; } static const struct i2c_device_id switch_cpld_ids[] = { - { "switch_cpld", 0x30 }, + { "switch_cpld", CPLD1_ADDR }, { } }; From 5aa86cb1a4e654b857ca9179a117b2458fa8b935 Mon Sep 17 00:00:00 2001 From: Wirut Getbamrung Date: Tue, 28 Sep 2021 15:46:17 +0700 Subject: [PATCH 3/6] [platform/cel-blackstone]: remove cpld2 command from switch cpld driver --- .../blackstone/modules/switch_cpld.c | 95 +------------------ 1 file changed, 5 insertions(+), 90 deletions(-) diff --git a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c index 7dbc529e9e0c..2a2580940c3d 100644 --- a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c +++ b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c @@ -15,7 +15,6 @@ #include #include #include -// #include #include #define CPLD1_ADDR 0x30 @@ -26,9 +25,7 @@ #define LED_TEST 0x0A struct switch_cpld_data { - // struct mutex lock; struct i2c_client *client; - // struct i2c_client *client2; uint8_t read_addr; }; @@ -140,16 +137,11 @@ static ssize_t port_led_mode_show(struct device *dev, int led_mode_1, led_mode_2; struct switch_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client1 = data->client; - // struct i2c_client *client2 = data->client2; led_mode_1 = i2c_smbus_read_byte_data(client1, LED_OPMODE); if (led_mode_1 < 0) return led_mode_1; - // led_mode_2 = i2c_smbus_read_byte_data(client2, LED_OPMODE); - // if (led_mode_2 < 0) - // return led_mode_2; - return sprintf(buf, "%s %s\n", led_mode_1 ? "test" : "normal", led_mode_2 ? "test" : "normal"); @@ -163,7 +155,6 @@ static ssize_t port_led_mode_store(struct device *dev, uint8_t led_mode; struct switch_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client1 = data->client; - // struct i2c_client *client2 = data->client2; if (sysfs_streq(buf, "test")) led_mode = 0x01; @@ -177,11 +168,6 @@ static ssize_t port_led_mode_store(struct device *dev, return status; } - // status = i2c_smbus_write_byte_data(client2, LED_OPMODE, led_mode); - // if (status != 0) { - // return status; - // } - return size; } @@ -191,16 +177,11 @@ static ssize_t port_led_color_show(struct device *dev, int led_color1, led_color2; struct switch_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client1 = data->client; - // struct i2c_client *client2 = data->client2; led_color1 = i2c_smbus_read_byte_data(client1, LED_TEST); if (led_color1 < 0) return led_color1; - // led_color2 = i2c_smbus_read_byte_data(client2, LED_TEST); - // if (led_color2 < 0) - // return led_color2; - return sprintf(buf, "%s %s\n", led_color1 == 0x02 ? "green" : led_color1 == 0x01 ? "amber" : "off", @@ -222,7 +203,6 @@ static ssize_t port_led_color_store(struct device *dev, uint8_t led_color1, led_color2; struct switch_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client1 = data->client; - // struct i2c_client *client2 = data->client2; if (sysfs_streq(buf, "off")) { led_color1 = 0x07; @@ -257,11 +237,6 @@ static ssize_t port_led_color_store(struct device *dev, return status; } - // status = i2c_smbus_write_byte_data(client2, LED_TEST, led_color2); - // if (status != 0) { - // return status; - // } - return size; } @@ -283,15 +258,7 @@ static int switch_cpld_probe(struct i2c_client *client, { int err; struct switch_cpld_data *drvdata1, *drvdata2; - struct device *hwmon_dev1;//, *hwmon_dev2; - // struct i2c_client *client2; - - // if (client->addr != CPLD1_ADDR) { - // dev_err(&client->dev, "probe, bad i2c addr: 0x%x\n", - // client->addr); - // err = -EINVAL; - // goto exit; - // } + struct device *hwmon_dev1; if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) return -EPFNOSUPPORT; @@ -305,7 +272,6 @@ static int switch_cpld_probe(struct i2c_client *client, goto exit; } - // mutex_init(&drvdata1->lock); drvdata1->client = client; drvdata1->read_addr = 0x00; i2c_set_clientdata(client, drvdata1); @@ -319,70 +285,21 @@ static int switch_cpld_probe(struct i2c_client *client, goto exit; } - // err = sysfs_create_link(&client->dev.kobj, &hwmon_dev1->kobj, "CPLD1"); - // if (err) { - // goto exit; - // } - - // /* CPLD2 */ - // drvdata2 = devm_kzalloc(&client->dev, - // sizeof(struct switch_cpld_data), GFP_KERNEL); - - // if (!drvdata2) { - // err = -ENOMEM; - // goto err_link; - // } - - // client2 = i2c_new_dummy(client->adapter, CPLD2_ADDR); - // if (!client2) { - // dev_err(&client->dev, "address 0x%02x unavailable\n", - // CPLD2_ADDR); - // err = -EADDRINUSE; - // goto err_link; - // } - - // mutex_init(&drvdata2->lock); - // drvdata2->read_addr = 0x00; - // drvdata2->client = client2; - // i2c_set_clientdata(client2, drvdata2); - - // /* attach client2 to be client2 of CPLD1 - // for later use on port led sysfs */ - // drvdata1->client2 = client2; - - // hwmon_dev2 = devm_hwmon_device_register_with_groups(&client2->dev, - // "CPLD2", - // drvdata2, - // switch_cpld_groups); - - // if (IS_ERR(hwmon_dev2)) { - // err = PTR_ERR(hwmon_dev2); - // goto err_client2; - // } - - // err = sysfs_create_link(&client->dev.kobj, &hwmon_dev2->kobj, "CPLD2"); - // if (err) { - // goto err_client2; - // } + err = sysfs_create_link(&client->dev.kobj, &hwmon_dev1->kobj, "CPLD"); + if (err) { + goto exit; + } //port led err = sysfs_create_group(&client->dev.kobj, &sff_led_groups); if (err) { dev_err(&client->dev, "failed to create sysfs attribute group.\n"); - // goto err_link2; goto err_link; } return 0; -// err_link2: -// sysfs_remove_link(&client->dev.kobj, "CPLD2"); - -// err_client2: -// if (client2) -// i2c_unregister_device(client2); - err_link: sysfs_remove_link(&client->dev.kobj, "CPLD"); @@ -396,9 +313,7 @@ static int switch_cpld_remove(struct i2c_client *client) struct switch_cpld_data *data = i2c_get_clientdata(client); sysfs_remove_group(&client->dev.kobj, &sff_led_groups); - // sysfs_remove_link(&data->client->dev.kobj, "CPLD2"); sysfs_remove_link(&client->dev.kobj, "CPLD"); - // i2c_unregister_device(data->client2); return 0; } From 93d287bcea8238d955ff692046bbbc08931c1a36 Mon Sep 17 00:00:00 2001 From: Wirut Getbamrung Date: Tue, 28 Sep 2021 16:07:02 +0700 Subject: [PATCH 4/6] [platform/cel-blackstone]: change driver name from switch cpld to misc cpld --- .../blackstone/modules/Makefile | 2 +- .../modules/{switch_cpld.c => misc_cpld.c} | 67 +++++++++---------- .../debian/platform-modules-blackstone.init | 5 +- 3 files changed, 37 insertions(+), 37 deletions(-) rename platform/broadcom/sonic-platform-modules-cel/blackstone/modules/{switch_cpld.c => misc_cpld.c} (80%) diff --git a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/Makefile b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/Makefile index 880646de76d9..6db3989ee07e 100644 --- a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/Makefile +++ b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/Makefile @@ -1 +1 @@ -obj-m := baseboard-lpc.o mc24lc64t.o cls-fpga.o xcvr-cls.o switch_cpld.o cls-i2c-ocores.o +obj-m := baseboard-lpc.o mc24lc64t.o cls-fpga.o xcvr-cls.o misc_cpld.o cls-i2c-ocores.o diff --git a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/misc_cpld.c similarity index 80% rename from platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c rename to platform/broadcom/sonic-platform-modules-cel/blackstone/modules/misc_cpld.c index 2a2580940c3d..b8e5caeff4f8 100644 --- a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/switch_cpld.c +++ b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/misc_cpld.c @@ -1,5 +1,5 @@ /* - * switch_cpld.c - i2c driver for Blackstone DP switchboard CPLD1/CPLD2 + * misc_cpld.c - i2c driver for Blackstone MISC CPLD1/CPLD2 * provides sysfs interfaces to access CPLD register and control port LEDs * * Copyright (C) 2021 Celestica Corp. @@ -24,7 +24,7 @@ #define LED_OPMODE 0x09 #define LED_TEST 0x0A -struct switch_cpld_data { +struct misc_cpld_data { struct i2c_client *client; uint8_t read_addr; }; @@ -32,7 +32,7 @@ struct switch_cpld_data { static ssize_t getreg_show(struct device *dev, struct device_attribute *attr, char *buf) { - struct switch_cpld_data *data = dev_get_drvdata(dev); + struct misc_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client = data->client; int value; @@ -48,7 +48,7 @@ static ssize_t getreg_store(struct device *dev, struct device_attribute *attr, { uint8_t value; ssize_t status; - struct switch_cpld_data *data = dev_get_drvdata(dev); + struct misc_cpld_data *data = dev_get_drvdata(dev); status = kstrtou8(buf, 0, &value); if (status != 0) @@ -64,7 +64,7 @@ static ssize_t setreg_store(struct device *dev, struct device_attribute *attr, { uint8_t addr, value; ssize_t status; - struct switch_cpld_data *data = dev_get_drvdata(dev); + struct misc_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client = data->client; char *tok; @@ -91,7 +91,7 @@ static ssize_t setreg_store(struct device *dev, struct device_attribute *attr, static ssize_t scratch_show(struct device *dev, struct device_attribute *attr, char *buf) { - struct switch_cpld_data *data = dev_get_drvdata(dev); + struct misc_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client = data->client; int value; @@ -107,7 +107,7 @@ static ssize_t scratch_store(struct device *dev, struct device_attribute *attr, { uint8_t value; ssize_t status; - struct switch_cpld_data *data = dev_get_drvdata(dev); + struct misc_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client = data->client; status = kstrtou8(buf, 0, &value); @@ -123,19 +123,19 @@ DEVICE_ATTR_RW(getreg); DEVICE_ATTR_WO(setreg); DEVICE_ATTR_RW(scratch); -static struct attribute *switch_cpld_attrs[] = { +static struct attribute *misc_cpld_attrs[] = { &dev_attr_getreg.attr, &dev_attr_setreg.attr, &dev_attr_scratch.attr, NULL, }; -ATTRIBUTE_GROUPS(switch_cpld); +ATTRIBUTE_GROUPS(misc_cpld); static ssize_t port_led_mode_show(struct device *dev, struct device_attribute *attr, char *buf) { int led_mode_1, led_mode_2; - struct switch_cpld_data *data = dev_get_drvdata(dev); + struct misc_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client1 = data->client; led_mode_1 = i2c_smbus_read_byte_data(client1, LED_OPMODE); @@ -153,7 +153,7 @@ static ssize_t port_led_mode_store(struct device *dev, { int status; uint8_t led_mode; - struct switch_cpld_data *data = dev_get_drvdata(dev); + struct misc_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client1 = data->client; if (sysfs_streq(buf, "test")) @@ -175,7 +175,7 @@ static ssize_t port_led_color_show(struct device *dev, struct device_attribute *attr, char *buf) { int led_color1, led_color2; - struct switch_cpld_data *data = dev_get_drvdata(dev); + struct misc_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client1 = data->client; led_color1 = i2c_smbus_read_byte_data(client1, LED_TEST); @@ -201,7 +201,7 @@ static ssize_t port_led_color_store(struct device *dev, { int status; uint8_t led_color1, led_color2; - struct switch_cpld_data *data = dev_get_drvdata(dev); + struct misc_cpld_data *data = dev_get_drvdata(dev); struct i2c_client *client1 = data->client; if (sysfs_streq(buf, "off")) { @@ -253,11 +253,11 @@ static struct attribute_group sff_led_groups = { .attrs = sff_led_attrs, }; -static int switch_cpld_probe(struct i2c_client *client, +static int misc_cpld_probe(struct i2c_client *client, const struct i2c_device_id *id) { int err; - struct switch_cpld_data *drvdata1, *drvdata2; + struct misc_cpld_data *drvdata1, *drvdata2; struct device *hwmon_dev1; if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) @@ -265,7 +265,7 @@ static int switch_cpld_probe(struct i2c_client *client, /* CPLD1 */ drvdata1 = devm_kzalloc(&client->dev, - sizeof(struct switch_cpld_data), GFP_KERNEL); + sizeof(struct misc_cpld_data), GFP_KERNEL); if (!drvdata1) { err = -ENOMEM; @@ -276,16 +276,16 @@ static int switch_cpld_probe(struct i2c_client *client, drvdata1->read_addr = 0x00; i2c_set_clientdata(client, drvdata1); hwmon_dev1 = devm_hwmon_device_register_with_groups(&client->dev, - "CPLD1", + "MISC_CPLD", drvdata1, - switch_cpld_groups); + misc_cpld_groups); if (IS_ERR(hwmon_dev1)) { err = PTR_ERR(hwmon_dev1); goto exit; } - err = sysfs_create_link(&client->dev.kobj, &hwmon_dev1->kobj, "CPLD"); + err = sysfs_create_link(&client->dev.kobj, &hwmon_dev1->kobj, "MISC_CPLD"); if (err) { goto exit; } @@ -301,43 +301,42 @@ static int switch_cpld_probe(struct i2c_client *client, return 0; err_link: - sysfs_remove_link(&client->dev.kobj, "CPLD"); + sysfs_remove_link(&client->dev.kobj, "MISC_CPLD"); exit: dev_err(&client->dev, "probe error %d\n", err); return err; } -static int switch_cpld_remove(struct i2c_client *client) +static int misc_cpld_remove(struct i2c_client *client) { - struct switch_cpld_data *data = i2c_get_clientdata(client); + struct misc_cpld_data *data = i2c_get_clientdata(client); sysfs_remove_group(&client->dev.kobj, &sff_led_groups); - sysfs_remove_link(&client->dev.kobj, "CPLD"); + sysfs_remove_link(&client->dev.kobj, "MISC_CPLD"); return 0; } -static const struct i2c_device_id switch_cpld_ids[] = { - { "switch_cpld", CPLD1_ADDR }, +static const struct i2c_device_id misc_cpld_ids[] = { + { "misc_cpld", CPLD1_ADDR }, { } }; -MODULE_DEVICE_TABLE(i2c, switch_cpld_ids); +MODULE_DEVICE_TABLE(i2c, misc_cpld_ids); -static struct i2c_driver switch_cpld_driver = { +static struct i2c_driver misc_cpld_driver = { .driver = { - .name = "switch_cpld", + .name = "misc_cpld", .owner = THIS_MODULE, }, - .probe = switch_cpld_probe, - .remove = switch_cpld_remove, - .id_table = switch_cpld_ids, + .probe = misc_cpld_probe, + .remove = misc_cpld_remove, + .id_table = misc_cpld_ids, }; -module_i2c_driver(switch_cpld_driver); +module_i2c_driver(misc_cpld_driver); -MODULE_AUTHOR("Budsakol Sirirattanasakul"); MODULE_AUTHOR("Wirut Getbamrung"); -MODULE_DESCRIPTION("Celestica Blackstone Switchboard CPLD driver"); +MODULE_DESCRIPTION("Celestica Blackstone MISC_CPLD driver"); MODULE_VERSION("1.0.0"); MODULE_LICENSE("GPL"); diff --git a/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-blackstone.init b/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-blackstone.init index d820789c076d..cec5ed415673 100644 --- a/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-blackstone.init +++ b/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-blackstone.init @@ -24,7 +24,7 @@ start) modprobe cls-i2c-ocores modprobe cls-fpga modprobe xcvr-cls - modprobe switch_cpld + modprobe misc_cpld modprobe i2c-mux-pca954x force_deselect_on_exit=1 # Instantiate TLV EEPROM device on I801 bus @@ -37,7 +37,8 @@ start) decode-syseeprom --init 2> /dev/null & # Attach switchboard CPLD i2c device - echo switch_cpld 0x30 > /sys/bus/i2c/devices/i2c-3/new_device + echo misc_cpld 0x30 > /sys/bus/i2c/devices/i2c-2/new_device + echo misc_cpld 0x31 > /sys/bus/i2c/devices/i2c-3/new_device # Attach QSFP-DD i2c devices echo pca9548 0x70 > /sys/bus/i2c/devices/i2c-1/new_device From 9077d96828443a2c2734a857a0c16f29ec87460e Mon Sep 17 00:00:00 2001 From: Wirut Getbamrung Date: Tue, 28 Sep 2021 16:24:43 +0700 Subject: [PATCH 5/6] [platform/cel-blackstone]: remove unused variable in misc cpld driver --- .../sonic-platform-modules-cel/blackstone/modules/misc_cpld.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/misc_cpld.c b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/misc_cpld.c index b8e5caeff4f8..8fafb57f6b75 100644 --- a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/misc_cpld.c +++ b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/misc_cpld.c @@ -257,7 +257,7 @@ static int misc_cpld_probe(struct i2c_client *client, const struct i2c_device_id *id) { int err; - struct misc_cpld_data *drvdata1, *drvdata2; + struct misc_cpld_data *drvdata1; struct device *hwmon_dev1; if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) @@ -310,8 +310,6 @@ static int misc_cpld_probe(struct i2c_client *client, static int misc_cpld_remove(struct i2c_client *client) { - struct misc_cpld_data *data = i2c_get_clientdata(client); - sysfs_remove_group(&client->dev.kobj, &sff_led_groups); sysfs_remove_link(&client->dev.kobj, "MISC_CPLD"); return 0; From 656c763373b1c05634f8278cc2d1c6b601b0f262 Mon Sep 17 00:00:00 2001 From: Wirut Getbamrung Date: Wed, 29 Sep 2021 11:04:26 +0700 Subject: [PATCH 6/6] [platform/cel-blackstone]: remove unused coment on misc cpld driver --- .../sonic-platform-modules-cel/blackstone/modules/misc_cpld.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/misc_cpld.c b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/misc_cpld.c index 8fafb57f6b75..330c79fe98b6 100644 --- a/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/misc_cpld.c +++ b/platform/broadcom/sonic-platform-modules-cel/blackstone/modules/misc_cpld.c @@ -18,8 +18,6 @@ #include #define CPLD1_ADDR 0x30 -// #define CPLD2_ADDR 0x31 - #define SCRATCH_ADDR 0x01 #define LED_OPMODE 0x09 #define LED_TEST 0x0A @@ -263,7 +261,6 @@ static int misc_cpld_probe(struct i2c_client *client, if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) return -EPFNOSUPPORT; - /* CPLD1 */ drvdata1 = devm_kzalloc(&client->dev, sizeof(struct misc_cpld_data), GFP_KERNEL);