Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mfd: tqmx86: Correct board names for TQMxE39x

It seems that this driver was developed based on preliminary documentation.
Report the correct names for all TQMxE39x variants, as they are used by
the released hardware revisions:

- Fix names for TQMxE39C1/C2 board IDs
- Distinguish TQMxE39M and TQMxE39S, which use the same board ID

The TQMxE39M/S are distinguished using the SAUC (Sanctioned Alternate
Uses Configuration) register of the GPIO controller. This also prepares
for the correct handling of the differences between the GPIO controllers
of our COMe and SMARC modules.

Fixes: 2f17dd34ffed ("mfd: tqmx86: IO controller with I2C, Wachdog and GPIO")
Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Lee Jones <lee@kernel.org>
Link: https://lore.kernel.org/r/aca9a7cb42a85181bcb456c437554d2728e708ec.1676892223.git.matthias.schiffer@ew.tq-group.com

authored by

Matthias Schiffer and committed by
Lee Jones
f376c479 051c69ff

+17 -15
+17 -15
drivers/mfd/tqmx86.c
··· 30 30 #define TQMX86_REG_BOARD_ID_50UC 2 31 31 #define TQMX86_REG_BOARD_ID_E38C 3 32 32 #define TQMX86_REG_BOARD_ID_60EB 4 33 - #define TQMX86_REG_BOARD_ID_E39M 5 34 - #define TQMX86_REG_BOARD_ID_E39C 6 35 - #define TQMX86_REG_BOARD_ID_E39x 7 33 + #define TQMX86_REG_BOARD_ID_E39MS 5 34 + #define TQMX86_REG_BOARD_ID_E39C1 6 35 + #define TQMX86_REG_BOARD_ID_E39C2 7 36 36 #define TQMX86_REG_BOARD_ID_70EB 8 37 37 #define TQMX86_REG_BOARD_ID_80UC 9 38 38 #define TQMX86_REG_BOARD_ID_110EB 11 ··· 48 48 #define TQMX86_REG_IO_EXT_INT_12 3 49 49 #define TQMX86_REG_IO_EXT_INT_MASK 0x3 50 50 #define TQMX86_REG_IO_EXT_INT_GPIO_SHIFT 4 51 + #define TQMX86_REG_SAUC 0x17 51 52 52 53 #define TQMX86_REG_I2C_DETECT 0x1a7 53 54 #define TQMX86_REG_I2C_DETECT_SOFT 0xa5 ··· 111 110 }, 112 111 }; 113 112 114 - static const char *tqmx86_board_id_to_name(u8 board_id) 113 + static const char *tqmx86_board_id_to_name(u8 board_id, u8 sauc) 115 114 { 116 115 switch (board_id) { 117 116 case TQMX86_REG_BOARD_ID_E38M: ··· 122 121 return "TQMxE38C"; 123 122 case TQMX86_REG_BOARD_ID_60EB: 124 123 return "TQMx60EB"; 125 - case TQMX86_REG_BOARD_ID_E39M: 126 - return "TQMxE39M"; 127 - case TQMX86_REG_BOARD_ID_E39C: 128 - return "TQMxE39C"; 129 - case TQMX86_REG_BOARD_ID_E39x: 130 - return "TQMxE39x"; 124 + case TQMX86_REG_BOARD_ID_E39MS: 125 + return (sauc == 0xff) ? "TQMxE39M" : "TQMxE39S"; 126 + case TQMX86_REG_BOARD_ID_E39C1: 127 + return "TQMxE39C1"; 128 + case TQMX86_REG_BOARD_ID_E39C2: 129 + return "TQMxE39C2"; 131 130 case TQMX86_REG_BOARD_ID_70EB: 132 131 return "TQMx70EB"; 133 132 case TQMX86_REG_BOARD_ID_80UC: ··· 160 159 case TQMX86_REG_BOARD_ID_E40C1: 161 160 case TQMX86_REG_BOARD_ID_E40C2: 162 161 return 24000; 163 - case TQMX86_REG_BOARD_ID_E39M: 164 - case TQMX86_REG_BOARD_ID_E39C: 165 - case TQMX86_REG_BOARD_ID_E39x: 162 + case TQMX86_REG_BOARD_ID_E39MS: 163 + case TQMX86_REG_BOARD_ID_E39C1: 164 + case TQMX86_REG_BOARD_ID_E39C2: 166 165 return 25000; 167 166 case TQMX86_REG_BOARD_ID_E38M: 168 167 case TQMX86_REG_BOARD_ID_E38C: ··· 176 175 177 176 static int tqmx86_probe(struct platform_device *pdev) 178 177 { 179 - u8 board_id, rev, i2c_det, io_ext_int_val; 178 + u8 board_id, sauc, rev, i2c_det, io_ext_int_val; 180 179 struct device *dev = &pdev->dev; 181 180 u8 gpio_irq_cfg, readback; 182 181 const char *board_name; ··· 206 205 return -ENOMEM; 207 206 208 207 board_id = ioread8(io_base + TQMX86_REG_BOARD_ID); 209 - board_name = tqmx86_board_id_to_name(board_id); 208 + sauc = ioread8(io_base + TQMX86_REG_SAUC); 209 + board_name = tqmx86_board_id_to_name(board_id, sauc); 210 210 rev = ioread8(io_base + TQMX86_REG_BOARD_REV); 211 211 212 212 dev_info(dev,