static ssize_t swpld2_data_show()

in platform/broadcom/sonic-platform-modules-delta/agc032/modules/delta_agc032_swpld.c [1017:1436]


static ssize_t swpld2_data_show(struct device *dev, struct device_attribute *dev_attr, char *buf)
{
    struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
    struct device *i2cdev = kobj_to_dev(kobj_swpld2->parent);
    struct platform_data *pdata = i2cdev->platform_data;
    unsigned int select = 0;
    unsigned char offset = 0;
    int mask = 0xFF;
    int shift = 0;
    int value = 0;
    bool hex_fmt = 0;
    char desc[256] = {0};

    select = attr->index;
    switch(select) {
        case SWPLD2_VER_TYPE:
            offset = 0x1;
            shift = 7;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\nSWPLD2 Version Type.\n");
            break;
        case SWPLD2_VER:
            offset = 0x1;
            mask = 0x7f;
            scnprintf(desc, PAGE_SIZE, "\nSWPLD2 Version.\n");
            break;
        case QSFP_P01_RST:
            offset = 0x11;
            shift = 7;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P02_RST:
            offset = 0x11;
            shift = 6;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P03_RST:
            offset = 0x11;
            shift = 5;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P04_RST:
            offset = 0x11;
            shift = 4;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P05_RST:
            offset = 0x11;
            shift = 3;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P06_RST:
            offset = 0x11;
            shift = 2;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P07_RST:
            offset = 0x11;
            shift = 1;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P08_RST:
            offset = 0x11;
            shift = 0;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P09_RST:
            offset = 0x12;
            shift = 7;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P10_RST:
            offset = 0x12;
            shift = 6;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P11_RST:
            offset = 0x12;
            shift = 5;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P12_RST:
            offset = 0x12;
            shift = 4;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P13_RST:
            offset = 0x12;
            shift = 3;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P14_RST:
            offset = 0x12;
            shift = 2;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P15_RST:
            offset = 0x12;
            shift = 1;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P16_RST:
            offset = 0x12;
            shift = 0;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Normal Operation.\n“0” = Reset.\n");
            break;
        case QSFP_P01_LPMODE:
            offset = 0x21;
            shift = 7;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P02_LPMODE:
            offset = 0x21;
            shift = 6;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P03_LPMODE:
            offset = 0x21;
            shift = 5;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P04_LPMODE:
            offset = 0x21;
            shift = 4;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P05_LPMODE:
            offset = 0x21;
            shift = 3;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P06_LPMODE:
            offset = 0x21;
            shift = 2;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P07_LPMODE:
            offset = 0x21;
            shift = 1;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P08_LPMODE:
            offset = 0x21;
            shift = 0;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P09_LPMODE:
            offset = 0x22;
            shift = 7;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P10_LPMODE:
            offset = 0x22;
            shift = 6;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P11_LPMODE:
            offset = 0x22;
            shift = 5;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P12_LPMODE:
            offset = 0x22;
            shift = 4;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P13_LPMODE:
            offset = 0x22;
            shift = 3;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P14_LPMODE:
            offset = 0x22;
            shift = 2;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P15_LPMODE:
            offset = 0x22;
            shift = 1;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P16_LPMODE:
            offset = 0x22;
            shift = 0;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = LP Mode.\n“0” = Not LP Mode.\n");
            break;
        case QSFP_P01_MODPRS:
            offset = 0x51;
            shift = 7;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P02_MODPRS:
            offset = 0x51;
            shift = 6;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P03_MODPRS:
            offset = 0x51;
            shift = 5;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P04_MODPRS:
            offset = 0x51;
            shift = 4;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P05_MODPRS:
            offset = 0x51;
            shift = 3;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P06_MODPRS:
            offset = 0x51;
            shift = 2;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P07_MODPRS:
            offset = 0x51;
            shift = 1;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P08_MODPRS:
            offset = 0x51;
            shift = 0;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P09_MODPRS:
            offset = 0x52;
            shift = 7;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P10_MODPRS:
            offset = 0x52;
            shift = 6;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P11_MODPRS:
            offset = 0x52;
            shift = 5;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P12_MODPRS:
            offset = 0x52;
            shift = 4;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P13_MODPRS:
            offset = 0x52;
            shift = 3;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P14_MODPRS:
            offset = 0x52;
            shift = 2;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P15_MODPRS:
            offset = 0x52;
            shift = 1;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P16_MODPRS:
            offset = 0x52;
            shift = 0;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Present.\n“0” = Present.\n");
            break;
        case QSFP_P01_INTR:
            offset = 0x61;
            shift = 7;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P02_INTR:
            offset = 0x61;
            shift = 6;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P03_INTR:
            offset = 0x61;
            shift = 5;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P04_INTR:
            offset = 0x61;
            shift = 4;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P05_INTR:
            offset = 0x61;
            shift = 3;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P06_INTR:
            offset = 0x61;
            shift = 2;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P07_INTR:
            offset = 0x61;
            shift = 1;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P08_INTR:
            offset = 0x61;
            shift = 0;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P09_INTR:
            offset = 0x62;
            shift = 7;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P10_INTR:
            offset = 0x62;
            shift = 6;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P11_INTR:
            offset = 0x62;
            shift = 5;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P12_INTR:
            offset = 0x62;
            shift = 4;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P13_INTR:
            offset = 0x62;
            shift = 3;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P14_INTR:
            offset = 0x62;
            shift = 2;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P15_INTR:
            offset = 0x62;
            shift = 1;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
        case QSFP_P16_INTR:
            offset = 0x62;
            shift = 0;
            mask = (1 << shift);
            scnprintf(desc, PAGE_SIZE, "\n“1” = Not Assert Intrrupt.\n“0” = Assert Intrrupt.\n");
            break;
    }

    value = i2c_smbus_read_byte_data(pdata[swpld2].client, offset);
    value = (value & mask) >> shift;
    if(hex_fmt) {
        return scnprintf(buf, PAGE_SIZE, "0x%02x%s", value, desc);
    } else {
        return scnprintf(buf, PAGE_SIZE, "%d%s", value, desc);
    }
}