History

mfd: max77620: Support Maxim 77663

Add support for Maxim 77663 using the Max77620 driver. The hardware is very similar to Max77663/20024, although there are couple minor differences.

Dmitry Osipenko committed 7 years ago

Commit 4c58f701 parent ea611d12 files · +69 −1Browse files

Unified · Split

2 files
  1. drivers/mfd/max77620.c +68 −1
  2. include/linux/mfd/max77620.h +1 −0
drivers/mfd/max77620.c+68−1
@@ -111,6 +111,26 @@ static const struct mfd_cell max20024_children[] = { · 110 unmodified lines
111 },111 },
112};112};
113 113
114static const struct mfd_cell max77663_children[] = {
115 { .name = "max77620-pinctrl", },
116 { .name = "max77620-clock", },
117 { .name = "max77663-pmic", },
118 { .name = "max77620-watchdog", },
119 {
120 .name = "max77620-gpio",
121 .resources = gpio_resources,
122 .num_resources = ARRAY_SIZE(gpio_resources),
123 }, {
124 .name = "max77620-rtc",
125 .resources = rtc_resources,
126 .num_resources = ARRAY_SIZE(rtc_resources),
127 }, {
128 .name = "max77663-power",
129 .resources = power_resources,
130 .num_resources = ARRAY_SIZE(power_resources),
131 },
132};
133
114static const struct regmap_range max77620_readable_ranges[] = {134static const struct regmap_range max77620_readable_ranges[] = {
115 regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_DVSSD4),135 regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_DVSSD4),
116};136};
@@ -171,6 +191,35 @@ static const struct regmap_config max20024_regmap_config = { · 54 unmodified lines
171 .volatile_table = &max77620_volatile_table,191 .volatile_table = &max77620_volatile_table,
172};192};
173 193
194static const struct regmap_range max77663_readable_ranges[] = {
195 regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_CID5),
196};
197
198static const struct regmap_access_table max77663_readable_table = {
199 .yes_ranges = max77663_readable_ranges,
200 .n_yes_ranges = ARRAY_SIZE(max77663_readable_ranges),
201};
202
203static const struct regmap_range max77663_writable_ranges[] = {
204 regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_CID5),
205};
206
207static const struct regmap_access_table max77663_writable_table = {
208 .yes_ranges = max77663_writable_ranges,
209 .n_yes_ranges = ARRAY_SIZE(max77663_writable_ranges),
210};
211
212static const struct regmap_config max77663_regmap_config = {
213 .name = "power-slave",
214 .reg_bits = 8,
215 .val_bits = 8,
216 .max_register = MAX77620_REG_CID5 + 1,
217 .cache_type = REGCACHE_RBTREE,
218 .rd_table = &max77663_readable_table,
219 .wr_table = &max77663_writable_table,
220 .volatile_table = &max77620_volatile_table,
221};
222
174/*223/*
175 * MAX77620 and MAX20024 has the following steps of the interrupt handling224 * MAX77620 and MAX20024 has the following steps of the interrupt handling
176 * for TOP interrupts:225 * for TOP interrupts:
@@ -240,6 +289,9 @@ static int max77620_get_fps_period_reg_value(struct max77620_chip *chip, · 63 unmodified lines
240 case MAX77620:289 case MAX77620:
241 fps_min_period = MAX77620_FPS_PERIOD_MIN_US;290 fps_min_period = MAX77620_FPS_PERIOD_MIN_US;
242 break;291 break;
292 case MAX77663:
293 fps_min_period = MAX20024_FPS_PERIOD_MIN_US;
294 break;
243 default:295 default:
244 return -EINVAL;296 return -EINVAL;
245 }297 }
@@ -274,6 +326,9 @@ static int max77620_config_fps(struct max77620_chip *chip, · 28 unmodified lines
274 case MAX77620:326 case MAX77620:
275 fps_max_period = MAX77620_FPS_PERIOD_MAX_US;327 fps_max_period = MAX77620_FPS_PERIOD_MAX_US;
276 break;328 break;
329 case MAX77663:
330 fps_max_period = MAX20024_FPS_PERIOD_MAX_US;
331 break;
277 default:332 default:
278 return -EINVAL;333 return -EINVAL;
279 }334 }
@@ -375,6 +430,9 @@ static int max77620_initialise_fps(struct max77620_chip *chip) · 95 unmodified lines
375 }430 }
376 431
377skip_fps:432skip_fps:
433 if (chip->chip_id == MAX77663)
434 return 0;
435
378 /* Enable wake on EN0 pin */436 /* Enable wake on EN0 pin */
379 ret = regmap_update_bits(chip->rmap, MAX77620_REG_ONOFFCNFG2,437 ret = regmap_update_bits(chip->rmap, MAX77620_REG_ONOFFCNFG2,
380 MAX77620_ONOFFCNFG2_WK_EN0,438 MAX77620_ONOFFCNFG2_WK_EN0,
@@ -453,6 +511,11 @@ static int max77620_probe(struct i2c_client *client, · 72 unmodified lines
453 n_mfd_cells = ARRAY_SIZE(max20024_children);511 n_mfd_cells = ARRAY_SIZE(max20024_children);
454 rmap_config = &max20024_regmap_config;512 rmap_config = &max20024_regmap_config;
455 break;513 break;
514 case MAX77663:
515 mfd_cells = max77663_children;
516 n_mfd_cells = ARRAY_SIZE(max77663_children);
517 rmap_config = &max77663_regmap_config;
518 break;
456 default:519 default:
457 dev_err(chip->dev, "ChipID is invalid %d\n", chip->chip_id);520 dev_err(chip->dev, "ChipID is invalid %d\n", chip->chip_id);
458 return -EINVAL;521 return -EINVAL;
@@ -546,6 +609,9 @@ static int max77620_i2c_suspend(struct device *dev) · 87 unmodified lines
546 return ret;609 return ret;
547 }610 }
548 611
612 if (chip->chip_id == MAX77663)
613 goto out;
614
549 /* Disable WK_EN0 */615 /* Disable WK_EN0 */
550 ret = regmap_update_bits(chip->rmap, MAX77620_REG_ONOFFCNFG2,616 ret = regmap_update_bits(chip->rmap, MAX77620_REG_ONOFFCNFG2,
551 MAX77620_ONOFFCNFG2_WK_EN0, 0);617 MAX77620_ONOFFCNFG2_WK_EN0, 0);
@@ -581,7 +647,7 @@ static int max77620_i2c_resume(struct device *dev) · 29 unmodified lines
581 * For MAX20024: No need to configure WKEN0 on resume as647 * For MAX20024: No need to configure WKEN0 on resume as
582 * it is configured on Init.648 * it is configured on Init.
583 */649 */
584 if (chip->chip_id == MAX20024)650 if (chip->chip_id == MAX20024 || chip->chip_id == MAX77663)
585 goto out;651 goto out;
586 652
587 /* Enable WK_EN0 */653 /* Enable WK_EN0 */
@@ -603,6 +669,7 @@ out: · 15 unmodified lines
603static const struct i2c_device_id max77620_id[] = {669static const struct i2c_device_id max77620_id[] = {
604 {"max77620", MAX77620},670 {"max77620", MAX77620},
605 {"max20024", MAX20024},671 {"max20024", MAX20024},
672 {"max77663", MAX77663},
606 {},673 {},
607};674};
608 675
include/linux/mfd/max77620.h+1−0
@@ -324,6 +324,7 @@ enum max77620_fps_src { · 323 unmodified lines
324enum max77620_chip_id {324enum max77620_chip_id {
325 MAX77620,325 MAX77620,
326 MAX20024,326 MAX20024,
327 MAX77663,
327};328};
328 329
329struct max77620_chip {330struct max77620_chip {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t