aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform/x86/mlx-platform.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-03-10 16:16:37 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-03-10 16:16:37 -0400
commitdbbdf54c7206bf3f201f9ddaa5f4dd87835271cc (patch)
tree941dbf0dada73344acdfe891ec1d50a01316566d /drivers/platform/x86/mlx-platform.c
parent45ba8d5d061b13494c2a7a7652d51b9da3d9e77a (diff)
parent9c22cc020db637850ba47a14a598d09f706f19ad (diff)
Merge tag 'platform-drivers-x86-v5.1-1' of git://git.infradead.org/linux-platform-drivers-x86
Pull x86 platform driver updates from Darren Hart: - use MODULE_DEVICE_TABLE across several wmi drivers, keeping wmi_device_id and MODULE_ALIAS() declarations in sync - add several Ideapad models to the no_hw_rfkill list - add support for new Mellanox platforms, including new fan and LED functionality - address Dell keyboard backlight change event and power button release issues - update dell_rbu to use appropriate memory allocation mechanisms - several small fixes and Ice Lake support for intel_pmc_core - fix a suspend regression for Cherry Trail based devices in intel_int0002_vgpio - a few other routine fixes * tag 'platform-drivers-x86-v5.1-1' of git://git.infradead.org/linux-platform-drivers-x86: (50 commits) MAINTAINERS: Include mlxreg.h in Mellanox Platform Driver files platform/x86: ideapad-laptop: Add S130-14IGM to no_hw_rfkill list platform/x86: mlx-platform: Fix access mode for fan_dir attribute platform/x86: mlx-platform: Add UID LED for the next generation systems platform/x86: mlx-platform: Add extra CPLD for next generation systems platform/x86: wmi-bmof: use MODULE_DEVICE_TABLE() instead of MODULE_ALIAS() platform/x86: intel-wmi-thunderbolt: use MODULE_DEVICE_TABLE() instead of MODULE_ALIAS() platform/x86: huawei-wmi: use MODULE_DEVICE_TABLE() instead of MODULE_ALIAS() platform/x86: dell-wmi: use MODULE_DEVICE_TABLE() instead of MODULE_ALIAS() platform/x86: dell-wmi-descriptor: use MODULE_DEVICE_TABLE() instead of MODULE_ALIAS() platform/x86: dell-smbios-wmi: use MODULE_DEVICE_TABLE() instead of MODULE_ALIAS() platform/x86: wmi: add WMI support to MODULE_DEVICE_TABLE() platform/x86: wmi: move struct wmi_device_id to mod_devicetable.h modpost: file2alias: define size of alias platform/x86: touchscreen_dmi: Add info for the CHUWI Hi10 Air tablet platform/x86: ideapad-laptop: Add Ideapad 530S-14ARR to no_hw_rfkill list platform/x86: ideapad-laptop: Add Yoga C930 to no_hw_rfkill_list platform/x86: intel_pmc_core: Quirk to ignore XTAL shutdown platform/x86: intel_pmc_core: Add Package cstates residency info platform/x86: intel_pmc_core: Add ICL platform support ...
Diffstat (limited to 'drivers/platform/x86/mlx-platform.c')
-rw-r--r--drivers/platform/x86/mlx-platform.c105
1 files changed, 105 insertions, 0 deletions
diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c
index df3fcd36776a..48fa7573e29b 100644
--- a/drivers/platform/x86/mlx-platform.c
+++ b/drivers/platform/x86/mlx-platform.c
@@ -25,6 +25,7 @@
25#define MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET 0x00 25#define MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET 0x00
26#define MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET 0x01 26#define MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET 0x01
27#define MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET 0x02 27#define MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET 0x02
28#define MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET 0x03
28#define MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET 0x1d 29#define MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET 0x1d
29#define MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET 0x1e 30#define MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET 0x1e
30#define MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET 0x1f 31#define MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET 0x1f
@@ -33,6 +34,7 @@
33#define MLXPLAT_CPLD_LPC_REG_LED3_OFFSET 0x22 34#define MLXPLAT_CPLD_LPC_REG_LED3_OFFSET 0x22
34#define MLXPLAT_CPLD_LPC_REG_LED4_OFFSET 0x23 35#define MLXPLAT_CPLD_LPC_REG_LED4_OFFSET 0x23
35#define MLXPLAT_CPLD_LPC_REG_LED5_OFFSET 0x24 36#define MLXPLAT_CPLD_LPC_REG_LED5_OFFSET 0x24
37#define MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION 0x2a
36#define MLXPLAT_CPLD_LPC_REG_GP1_OFFSET 0x30 38#define MLXPLAT_CPLD_LPC_REG_GP1_OFFSET 0x30
37#define MLXPLAT_CPLD_LPC_REG_WP1_OFFSET 0x31 39#define MLXPLAT_CPLD_LPC_REG_WP1_OFFSET 0x31
38#define MLXPLAT_CPLD_LPC_REG_GP2_OFFSET 0x32 40#define MLXPLAT_CPLD_LPC_REG_GP2_OFFSET 0x32
@@ -67,6 +69,9 @@
67#define MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET 0xee 69#define MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET 0xee
68#define MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET 0xef 70#define MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET 0xef
69#define MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET 0xf0 71#define MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET 0xf0
72#define MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET 0xf5
73#define MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET 0xf6
74#define MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET 0xf7
70#define MLXPLAT_CPLD_LPC_IO_RANGE 0x100 75#define MLXPLAT_CPLD_LPC_IO_RANGE 0x100
71#define MLXPLAT_CPLD_LPC_I2C_CH1_OFF 0xdb 76#define MLXPLAT_CPLD_LPC_I2C_CH1_OFF 0xdb
72#define MLXPLAT_CPLD_LPC_I2C_CH2_OFF 0xda 77#define MLXPLAT_CPLD_LPC_I2C_CH2_OFF 0xda
@@ -584,36 +589,48 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_fan_items_data[] = {
584 .label = "fan1", 589 .label = "fan1",
585 .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 590 .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
586 .mask = BIT(0), 591 .mask = BIT(0),
592 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
593 .bit = BIT(0),
587 .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 594 .hpdev.nr = MLXPLAT_CPLD_NR_NONE,
588 }, 595 },
589 { 596 {
590 .label = "fan2", 597 .label = "fan2",
591 .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 598 .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
592 .mask = BIT(1), 599 .mask = BIT(1),
600 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
601 .bit = BIT(1),
593 .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 602 .hpdev.nr = MLXPLAT_CPLD_NR_NONE,
594 }, 603 },
595 { 604 {
596 .label = "fan3", 605 .label = "fan3",
597 .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 606 .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
598 .mask = BIT(2), 607 .mask = BIT(2),
608 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
609 .bit = BIT(2),
599 .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 610 .hpdev.nr = MLXPLAT_CPLD_NR_NONE,
600 }, 611 },
601 { 612 {
602 .label = "fan4", 613 .label = "fan4",
603 .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 614 .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
604 .mask = BIT(3), 615 .mask = BIT(3),
616 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
617 .bit = BIT(3),
605 .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 618 .hpdev.nr = MLXPLAT_CPLD_NR_NONE,
606 }, 619 },
607 { 620 {
608 .label = "fan5", 621 .label = "fan5",
609 .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 622 .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
610 .mask = BIT(4), 623 .mask = BIT(4),
624 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
625 .bit = BIT(4),
611 .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 626 .hpdev.nr = MLXPLAT_CPLD_NR_NONE,
612 }, 627 },
613 { 628 {
614 .label = "fan6", 629 .label = "fan6",
615 .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 630 .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
616 .mask = BIT(5), 631 .mask = BIT(5),
632 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
633 .bit = BIT(5),
617 .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 634 .hpdev.nr = MLXPLAT_CPLD_NR_NONE,
618 }, 635 },
619}; 636};
@@ -816,61 +833,90 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_led_data[] = {
816 .label = "fan1:green", 833 .label = "fan1:green",
817 .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 834 .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
818 .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 835 .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
836 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
837 .bit = BIT(0),
819 }, 838 },
820 { 839 {
821 .label = "fan1:orange", 840 .label = "fan1:orange",
822 .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 841 .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
823 .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 842 .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
843 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
844 .bit = BIT(0),
824 }, 845 },
825 { 846 {
826 .label = "fan2:green", 847 .label = "fan2:green",
827 .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 848 .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
828 .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 849 .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
850 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
851 .bit = BIT(1),
829 }, 852 },
830 { 853 {
831 .label = "fan2:orange", 854 .label = "fan2:orange",
832 .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 855 .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
833 .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 856 .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
857 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
858 .bit = BIT(1),
834 }, 859 },
835 { 860 {
836 .label = "fan3:green", 861 .label = "fan3:green",
837 .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 862 .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
838 .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 863 .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
864 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
865 .bit = BIT(2),
839 }, 866 },
840 { 867 {
841 .label = "fan3:orange", 868 .label = "fan3:orange",
842 .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 869 .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
843 .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 870 .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
871 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
872 .bit = BIT(2),
844 }, 873 },
845 { 874 {
846 .label = "fan4:green", 875 .label = "fan4:green",
847 .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 876 .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
848 .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 877 .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
878 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
879 .bit = BIT(3),
849 }, 880 },
850 { 881 {
851 .label = "fan4:orange", 882 .label = "fan4:orange",
852 .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 883 .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
853 .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 884 .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
885 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
886 .bit = BIT(3),
854 }, 887 },
855 { 888 {
856 .label = "fan5:green", 889 .label = "fan5:green",
857 .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 890 .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
858 .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 891 .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
892 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
893 .bit = BIT(4),
859 }, 894 },
860 { 895 {
861 .label = "fan5:orange", 896 .label = "fan5:orange",
862 .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 897 .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
863 .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 898 .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
899 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
900 .bit = BIT(4),
864 }, 901 },
865 { 902 {
866 .label = "fan6:green", 903 .label = "fan6:green",
867 .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 904 .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
868 .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 905 .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
906 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
907 .bit = BIT(5),
869 }, 908 },
870 { 909 {
871 .label = "fan6:orange", 910 .label = "fan6:orange",
872 .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 911 .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
873 .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 912 .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
913 .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
914 .bit = BIT(5),
915 },
916 {
917 .label = "uid:blue",
918 .reg = MLXPLAT_CPLD_LPC_REG_LED5_OFFSET,
919 .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
874 }, 920 },
875}; 921};
876 922
@@ -1100,6 +1146,12 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_regs_io_data[] = {
1100 .mode = 0444, 1146 .mode = 0444,
1101 }, 1147 },
1102 { 1148 {
1149 .label = "cpld4_version",
1150 .reg = MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET,
1151 .bit = GENMASK(7, 0),
1152 .mode = 0444,
1153 },
1154 {
1103 .label = "reset_long_pb", 1155 .label = "reset_long_pb",
1104 .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 1156 .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
1105 .mask = GENMASK(7, 0) & ~BIT(0), 1157 .mask = GENMASK(7, 0) & ~BIT(0),
@@ -1184,6 +1236,12 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_regs_io_data[] = {
1184 .bit = 1, 1236 .bit = 1,
1185 .mode = 0444, 1237 .mode = 0444,
1186 }, 1238 },
1239 {
1240 .label = "fan_dir",
1241 .reg = MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION,
1242 .bit = GENMASK(7, 0),
1243 .mode = 0444,
1244 },
1187}; 1245};
1188 1246
1189static struct mlxreg_core_platform_data mlxplat_default_ng_regs_io_data = { 1247static struct mlxreg_core_platform_data mlxplat_default_ng_regs_io_data = {
@@ -1201,61 +1259,85 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_fan_data[] = {
1201 .label = "tacho1", 1259 .label = "tacho1",
1202 .reg = MLXPLAT_CPLD_LPC_REG_TACHO1_OFFSET, 1260 .reg = MLXPLAT_CPLD_LPC_REG_TACHO1_OFFSET,
1203 .mask = GENMASK(7, 0), 1261 .mask = GENMASK(7, 0),
1262 .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
1263 .bit = BIT(0),
1204 }, 1264 },
1205 { 1265 {
1206 .label = "tacho2", 1266 .label = "tacho2",
1207 .reg = MLXPLAT_CPLD_LPC_REG_TACHO2_OFFSET, 1267 .reg = MLXPLAT_CPLD_LPC_REG_TACHO2_OFFSET,
1208 .mask = GENMASK(7, 0), 1268 .mask = GENMASK(7, 0),
1269 .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
1270 .bit = BIT(1),
1209 }, 1271 },
1210 { 1272 {
1211 .label = "tacho3", 1273 .label = "tacho3",
1212 .reg = MLXPLAT_CPLD_LPC_REG_TACHO3_OFFSET, 1274 .reg = MLXPLAT_CPLD_LPC_REG_TACHO3_OFFSET,
1213 .mask = GENMASK(7, 0), 1275 .mask = GENMASK(7, 0),
1276 .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
1277 .bit = BIT(2),
1214 }, 1278 },
1215 { 1279 {
1216 .label = "tacho4", 1280 .label = "tacho4",
1217 .reg = MLXPLAT_CPLD_LPC_REG_TACHO4_OFFSET, 1281 .reg = MLXPLAT_CPLD_LPC_REG_TACHO4_OFFSET,
1218 .mask = GENMASK(7, 0), 1282 .mask = GENMASK(7, 0),
1283 .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
1284 .bit = BIT(3),
1219 }, 1285 },
1220 { 1286 {
1221 .label = "tacho5", 1287 .label = "tacho5",
1222 .reg = MLXPLAT_CPLD_LPC_REG_TACHO5_OFFSET, 1288 .reg = MLXPLAT_CPLD_LPC_REG_TACHO5_OFFSET,
1223 .mask = GENMASK(7, 0), 1289 .mask = GENMASK(7, 0),
1290 .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
1291 .bit = BIT(4),
1224 }, 1292 },
1225 { 1293 {
1226 .label = "tacho6", 1294 .label = "tacho6",
1227 .reg = MLXPLAT_CPLD_LPC_REG_TACHO6_OFFSET, 1295 .reg = MLXPLAT_CPLD_LPC_REG_TACHO6_OFFSET,
1228 .mask = GENMASK(7, 0), 1296 .mask = GENMASK(7, 0),
1297 .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
1298 .bit = BIT(5),
1229 }, 1299 },
1230 { 1300 {
1231 .label = "tacho7", 1301 .label = "tacho7",
1232 .reg = MLXPLAT_CPLD_LPC_REG_TACHO7_OFFSET, 1302 .reg = MLXPLAT_CPLD_LPC_REG_TACHO7_OFFSET,
1233 .mask = GENMASK(7, 0), 1303 .mask = GENMASK(7, 0),
1304 .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
1305 .bit = BIT(6),
1234 }, 1306 },
1235 { 1307 {
1236 .label = "tacho8", 1308 .label = "tacho8",
1237 .reg = MLXPLAT_CPLD_LPC_REG_TACHO8_OFFSET, 1309 .reg = MLXPLAT_CPLD_LPC_REG_TACHO8_OFFSET,
1238 .mask = GENMASK(7, 0), 1310 .mask = GENMASK(7, 0),
1311 .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
1312 .bit = BIT(7),
1239 }, 1313 },
1240 { 1314 {
1241 .label = "tacho9", 1315 .label = "tacho9",
1242 .reg = MLXPLAT_CPLD_LPC_REG_TACHO9_OFFSET, 1316 .reg = MLXPLAT_CPLD_LPC_REG_TACHO9_OFFSET,
1243 .mask = GENMASK(7, 0), 1317 .mask = GENMASK(7, 0),
1318 .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET,
1319 .bit = BIT(0),
1244 }, 1320 },
1245 { 1321 {
1246 .label = "tacho10", 1322 .label = "tacho10",
1247 .reg = MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET, 1323 .reg = MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET,
1248 .mask = GENMASK(7, 0), 1324 .mask = GENMASK(7, 0),
1325 .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET,
1326 .bit = BIT(1),
1249 }, 1327 },
1250 { 1328 {
1251 .label = "tacho11", 1329 .label = "tacho11",
1252 .reg = MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET, 1330 .reg = MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET,
1253 .mask = GENMASK(7, 0), 1331 .mask = GENMASK(7, 0),
1332 .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET,
1333 .bit = BIT(2),
1254 }, 1334 },
1255 { 1335 {
1256 .label = "tacho12", 1336 .label = "tacho12",
1257 .reg = MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET, 1337 .reg = MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET,
1258 .mask = GENMASK(7, 0), 1338 .mask = GENMASK(7, 0),
1339 .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET,
1340 .bit = BIT(3),
1259 }, 1341 },
1260}; 1342};
1261 1343
@@ -1299,6 +1381,7 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
1299 case MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET: 1381 case MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET:
1300 case MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET: 1382 case MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET:
1301 case MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET: 1383 case MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET:
1384 case MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET:
1302 case MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET: 1385 case MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET:
1303 case MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET: 1386 case MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET:
1304 case MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET: 1387 case MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET:
@@ -1307,6 +1390,7 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
1307 case MLXPLAT_CPLD_LPC_REG_LED3_OFFSET: 1390 case MLXPLAT_CPLD_LPC_REG_LED3_OFFSET:
1308 case MLXPLAT_CPLD_LPC_REG_LED4_OFFSET: 1391 case MLXPLAT_CPLD_LPC_REG_LED4_OFFSET:
1309 case MLXPLAT_CPLD_LPC_REG_LED5_OFFSET: 1392 case MLXPLAT_CPLD_LPC_REG_LED5_OFFSET:
1393 case MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION:
1310 case MLXPLAT_CPLD_LPC_REG_GP1_OFFSET: 1394 case MLXPLAT_CPLD_LPC_REG_GP1_OFFSET:
1311 case MLXPLAT_CPLD_LPC_REG_WP1_OFFSET: 1395 case MLXPLAT_CPLD_LPC_REG_WP1_OFFSET:
1312 case MLXPLAT_CPLD_LPC_REG_GP2_OFFSET: 1396 case MLXPLAT_CPLD_LPC_REG_GP2_OFFSET:
@@ -1341,6 +1425,9 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
1341 case MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET: 1425 case MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET:
1342 case MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET: 1426 case MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET:
1343 case MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET: 1427 case MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET:
1428 case MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET:
1429 case MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET:
1430 case MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET:
1344 return true; 1431 return true;
1345 } 1432 }
1346 return false; 1433 return false;
@@ -1352,6 +1439,7 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
1352 case MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET: 1439 case MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET:
1353 case MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET: 1440 case MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET:
1354 case MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET: 1441 case MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET:
1442 case MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET:
1355 case MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET: 1443 case MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET:
1356 case MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET: 1444 case MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET:
1357 case MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET: 1445 case MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET:
@@ -1360,6 +1448,7 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
1360 case MLXPLAT_CPLD_LPC_REG_LED3_OFFSET: 1448 case MLXPLAT_CPLD_LPC_REG_LED3_OFFSET:
1361 case MLXPLAT_CPLD_LPC_REG_LED4_OFFSET: 1449 case MLXPLAT_CPLD_LPC_REG_LED4_OFFSET:
1362 case MLXPLAT_CPLD_LPC_REG_LED5_OFFSET: 1450 case MLXPLAT_CPLD_LPC_REG_LED5_OFFSET:
1451 case MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION:
1363 case MLXPLAT_CPLD_LPC_REG_GP1_OFFSET: 1452 case MLXPLAT_CPLD_LPC_REG_GP1_OFFSET:
1364 case MLXPLAT_CPLD_LPC_REG_GP2_OFFSET: 1453 case MLXPLAT_CPLD_LPC_REG_GP2_OFFSET:
1365 case MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET: 1454 case MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET:
@@ -1392,6 +1481,9 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
1392 case MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET: 1481 case MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET:
1393 case MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET: 1482 case MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET:
1394 case MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET: 1483 case MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET:
1484 case MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET:
1485 case MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET:
1486 case MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET:
1395 return true; 1487 return true;
1396 } 1488 }
1397 return false; 1489 return false;
@@ -1614,6 +1706,13 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
1614 }, 1706 },
1615 }, 1707 },
1616 { 1708 {
1709 .callback = mlxplat_dmi_qmb7xx_matched,
1710 .matches = {
1711 DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
1712 DMI_MATCH(DMI_PRODUCT_NAME, "MSN38"),
1713 },
1714 },
1715 {
1617 .callback = mlxplat_dmi_default_matched, 1716 .callback = mlxplat_dmi_default_matched,
1618 .matches = { 1717 .matches = {
1619 DMI_MATCH(DMI_BOARD_NAME, "VMOD0001"), 1718 DMI_MATCH(DMI_BOARD_NAME, "VMOD0001"),
@@ -1643,6 +1742,12 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
1643 DMI_MATCH(DMI_BOARD_NAME, "VMOD0005"), 1742 DMI_MATCH(DMI_BOARD_NAME, "VMOD0005"),
1644 }, 1743 },
1645 }, 1744 },
1745 {
1746 .callback = mlxplat_dmi_qmb7xx_matched,
1747 .matches = {
1748 DMI_MATCH(DMI_BOARD_NAME, "VMOD0007"),
1749 },
1750 },
1646 { } 1751 { }
1647}; 1752};
1648 1753