|
@@ -438,6 +438,44 @@ struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_msn274x_data = {
|
|
|
.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
|
|
|
};
|
|
|
|
|
|
+/* Platform hotplug MSN201x system family data */
|
|
|
+static struct mlxreg_core_data mlxplat_mlxcpld_msn201x_pwr_items_data[] = {
|
|
|
+ {
|
|
|
+ .label = "pwr1",
|
|
|
+ .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
|
|
|
+ .mask = BIT(0),
|
|
|
+ .hpdev.nr = MLXPLAT_CPLD_NR_NONE,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .label = "pwr2",
|
|
|
+ .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
|
|
|
+ .mask = BIT(1),
|
|
|
+ .hpdev.nr = MLXPLAT_CPLD_NR_NONE,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct mlxreg_core_item mlxplat_mlxcpld_msn201x_items[] = {
|
|
|
+ {
|
|
|
+ .data = mlxplat_mlxcpld_msn201x_pwr_items_data,
|
|
|
+ .aggr_mask = MLXPLAT_CPLD_AGGR_PWR_MASK_DEF,
|
|
|
+ .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
|
|
|
+ .mask = MLXPLAT_CPLD_PWR_MASK,
|
|
|
+ .count = ARRAY_SIZE(mlxplat_mlxcpld_msn201x_pwr_items_data),
|
|
|
+ .inversed = 0,
|
|
|
+ .health = false,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static
|
|
|
+struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_msn201x_data = {
|
|
|
+ .items = mlxplat_mlxcpld_msn21xx_items,
|
|
|
+ .counter = ARRAY_SIZE(mlxplat_mlxcpld_msn201x_items),
|
|
|
+ .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
|
|
|
+ .mask = MLXPLAT_CPLD_AGGR_MASK_DEF,
|
|
|
+ .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
|
|
|
+ .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
|
|
|
+};
|
|
|
+
|
|
|
static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
|
|
|
{
|
|
|
switch (reg) {
|
|
@@ -581,6 +619,20 @@ static int __init mlxplat_dmi_msn274x_matched(const struct dmi_system_id *dmi)
|
|
|
return 1;
|
|
|
};
|
|
|
|
|
|
+static int __init mlxplat_dmi_msn201x_matched(const struct dmi_system_id *dmi)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+
|
|
|
+ for (i = 0; i < ARRAY_SIZE(mlxplat_mux_data); i++) {
|
|
|
+ mlxplat_mux_data[i].values = mlxplat_msn21xx_channels;
|
|
|
+ mlxplat_mux_data[i].n_values =
|
|
|
+ ARRAY_SIZE(mlxplat_msn21xx_channels);
|
|
|
+ }
|
|
|
+ mlxplat_hotplug = &mlxplat_mlxcpld_msn201x_data;
|
|
|
+
|
|
|
+ return 1;
|
|
|
+};
|
|
|
+
|
|
|
static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
|
|
|
{
|
|
|
.callback = mlxplat_dmi_msn274x_matched,
|
|
@@ -624,6 +676,13 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
|
|
|
DMI_MATCH(DMI_PRODUCT_NAME, "MSN21"),
|
|
|
},
|
|
|
},
|
|
|
+ {
|
|
|
+ .callback = mlxplat_dmi_msn201x_matched,
|
|
|
+ .matches = {
|
|
|
+ DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
|
|
|
+ DMI_MATCH(DMI_PRODUCT_NAME, "MSN201"),
|
|
|
+ },
|
|
|
+ },
|
|
|
{ }
|
|
|
};
|
|
|
|