• Home
  • Raw
  • Download

Lines Matching +full:pin +full:- +full:val

1 // SPDX-License-Identifier: GPL-2.0-only
3 * MAX77620 pin control driver.
16 #include <linux/pinctrl/pinconf-generic.h>
24 #include "pinctrl-utils.h"
50 .property = "maxim,active-fps-source",
53 .property = "maxim,active-fps-power-up-slot",
56 .property = "maxim,active-fps-power-down-slot",
59 .property = "maxim,suspend-fps-source",
62 .property = "maxim,suspend-fps-power-up-slot",
65 .property = "maxim,suspend-fps-power-down-slot",
148 FUNCTION_GROUP("lpm-control-in", LOW_POWER_MODE_CONTROL_IN),
149 FUNCTION_GROUP("fps-out", FLEXIBLE_POWER_SEQUENCER_OUT),
150 FUNCTION_GROUP("32k-out1", 32K_OUT1),
151 FUNCTION_GROUP("sd0-dvs-in", SD0_DYNAMIC_VOLTAGE_SCALING_IN),
152 FUNCTION_GROUP("sd1-dvs-in", SD1_DYNAMIC_VOLTAGE_SCALING_IN),
153 FUNCTION_GROUP("reference-out", REFERENCE_OUT),
179 return mpci->num_pin_groups; in max77620_pinctrl_get_groups_count()
187 return mpci->pin_groups[group].name; in max77620_pinctrl_get_group_name()
196 *pins = mpci->pin_groups[group].pins; in max77620_pinctrl_get_group_pins()
197 *num_pins = mpci->pin_groups[group].npins; in max77620_pinctrl_get_group_pins()
214 return mpci->num_functions; in max77620_pinctrl_get_funcs_count()
222 return mpci->functions[function].name; in max77620_pinctrl_get_func_name()
232 *groups = mpci->functions[function].groups; in max77620_pinctrl_get_func_groups()
233 *num_groups = mpci->functions[function].ngroups; in max77620_pinctrl_get_func_groups()
242 u8 val; in max77620_pinctrl_enable() local
246 val = 0; in max77620_pinctrl_enable()
247 } else if (function == mpci->pin_groups[group].alt_option) { in max77620_pinctrl_enable()
248 val = 1 << group; in max77620_pinctrl_enable()
250 dev_err(mpci->dev, "GPIO %u doesn't have function %u\n", in max77620_pinctrl_enable()
252 return -EINVAL; in max77620_pinctrl_enable()
254 ret = regmap_update_bits(mpci->rmap, MAX77620_REG_AME_GPIO, in max77620_pinctrl_enable()
255 BIT(group), val); in max77620_pinctrl_enable()
257 dev_err(mpci->dev, "REG AME GPIO update failed: %d\n", ret); in max77620_pinctrl_enable()
270 unsigned int pin, unsigned long *config) in max77620_pinconf_get() argument
273 struct device *dev = mpci->dev; in max77620_pinconf_get()
275 unsigned int val; in max77620_pinconf_get() local
281 if (mpci->pin_info[pin].drv_type == MAX77620_PIN_OD_DRV) in max77620_pinconf_get()
286 if (mpci->pin_info[pin].drv_type == MAX77620_PIN_PP_DRV) in max77620_pinconf_get()
291 ret = regmap_read(mpci->rmap, MAX77620_REG_PUE_GPIO, &val); in max77620_pinconf_get()
296 if (val & BIT(pin)) in max77620_pinconf_get()
301 ret = regmap_read(mpci->rmap, MAX77620_REG_PDE_GPIO, &val); in max77620_pinconf_get()
306 if (val & BIT(pin)) in max77620_pinconf_get()
312 return -ENOTSUPP; in max77620_pinconf_get()
323 unsigned int val; in max77620_get_default_fps() local
326 ret = regmap_read(mpci->rmap, addr, &val); in max77620_get_default_fps()
328 dev_err(mpci->dev, "Reg PUE_GPIO read failed: %d\n", ret); in max77620_get_default_fps()
331 *fps = (val & MAX77620_FPS_SRC_MASK) >> MAX77620_FPS_SRC_SHIFT; in max77620_get_default_fps()
337 int pin, int param) in max77620_set_fps_param() argument
339 struct max77620_fps_config *fps_config = &mpci->fps_config[pin]; in max77620_set_fps_param()
344 if ((pin < MAX77620_GPIO1) || (pin > MAX77620_GPIO3)) in max77620_set_fps_param()
347 addr = MAX77620_REG_FPS_GPIO1 + pin - 1; in max77620_set_fps_param()
353 param_val = fps_config->active_fps_src; in max77620_set_fps_param()
355 param_val = fps_config->suspend_fps_src; in max77620_set_fps_param()
362 param_val = fps_config->active_power_up_slots; in max77620_set_fps_param()
364 param_val = fps_config->suspend_power_up_slots; in max77620_set_fps_param()
371 param_val = fps_config->active_power_down_slots; in max77620_set_fps_param()
373 param_val = fps_config->suspend_power_down_slots; in max77620_set_fps_param()
377 dev_err(mpci->dev, "Invalid parameter %d for pin %d\n", in max77620_set_fps_param()
378 param, pin); in max77620_set_fps_param()
379 return -EINVAL; in max77620_set_fps_param()
385 ret = regmap_update_bits(mpci->rmap, addr, mask, param_val << shift); in max77620_set_fps_param()
387 dev_err(mpci->dev, "Reg 0x%02x update failed %d\n", addr, ret); in max77620_set_fps_param()
393 unsigned int pin, unsigned long *configs, in max77620_pinconf_set() argument
397 struct device *dev = mpci->dev; in max77620_pinconf_set()
401 unsigned int val; in max77620_pinconf_set() local
413 val = param_val ? 0 : 1; in max77620_pinconf_set()
414 ret = regmap_update_bits(mpci->rmap, in max77620_pinconf_set()
415 MAX77620_REG_GPIO0 + pin, in max77620_pinconf_set()
417 val); in max77620_pinconf_set()
421 mpci->pin_info[pin].drv_type = val ? in max77620_pinconf_set()
426 val = param_val ? 1 : 0; in max77620_pinconf_set()
427 ret = regmap_update_bits(mpci->rmap, in max77620_pinconf_set()
428 MAX77620_REG_GPIO0 + pin, in max77620_pinconf_set()
430 val); in max77620_pinconf_set()
434 mpci->pin_info[pin].drv_type = val ? in max77620_pinconf_set()
441 if ((pin < MAX77620_GPIO1) || (pin > MAX77620_GPIO3)) in max77620_pinconf_set()
442 return -EINVAL; in max77620_pinconf_set()
444 fps_config = &mpci->fps_config[pin]; in max77620_pinconf_set()
448 addr = MAX77620_REG_FPS_GPIO1 + pin - 1; in max77620_pinconf_set()
451 &fps_config->active_fps_src); in max77620_pinconf_set()
458 fps_config->active_fps_src = param_val; in max77620_pinconf_set()
460 fps_config->active_power_up_slots = param_val; in max77620_pinconf_set()
462 fps_config->active_power_down_slots = param_val; in max77620_pinconf_set()
464 ret = max77620_set_fps_param(mpci, pin, param); in max77620_pinconf_set()
472 if ((pin < MAX77620_GPIO1) || (pin > MAX77620_GPIO3)) in max77620_pinconf_set()
473 return -EINVAL; in max77620_pinconf_set()
475 fps_config = &mpci->fps_config[pin]; in max77620_pinconf_set()
479 addr = MAX77620_REG_FPS_GPIO1 + pin - 1; in max77620_pinconf_set()
482 &fps_config->suspend_fps_src); in max77620_pinconf_set()
489 fps_config->suspend_fps_src = param_val; in max77620_pinconf_set()
491 fps_config->suspend_power_up_slots = param_val; in max77620_pinconf_set()
493 fps_config->suspend_power_down_slots = in max77620_pinconf_set()
500 BIT(pin) : 0; in max77620_pinconf_set()
502 BIT(pin) : 0; in max77620_pinconf_set()
504 ret = regmap_update_bits(mpci->rmap, in max77620_pinconf_set()
506 BIT(pin), pu_val); in max77620_pinconf_set()
513 ret = regmap_update_bits(mpci->rmap, in max77620_pinconf_set()
515 BIT(pin), pd_val); in max77620_pinconf_set()
525 return -ENOTSUPP; in max77620_pinconf_set()
533 MAX77620_REG_GPIO0 + pin, ret); in max77620_pinconf_set()
550 struct max77620_chip *max77620 = dev_get_drvdata(pdev->dev.parent); in max77620_pinctrl_probe()
554 mpci = devm_kzalloc(&pdev->dev, sizeof(*mpci), GFP_KERNEL); in max77620_pinctrl_probe()
556 return -ENOMEM; in max77620_pinctrl_probe()
558 mpci->dev = &pdev->dev; in max77620_pinctrl_probe()
559 mpci->dev->of_node = pdev->dev.parent->of_node; in max77620_pinctrl_probe()
560 mpci->rmap = max77620->rmap; in max77620_pinctrl_probe()
562 mpci->pins = max77620_pins_desc; in max77620_pinctrl_probe()
563 mpci->num_pins = ARRAY_SIZE(max77620_pins_desc); in max77620_pinctrl_probe()
564 mpci->functions = max77620_pin_function; in max77620_pinctrl_probe()
565 mpci->num_functions = ARRAY_SIZE(max77620_pin_function); in max77620_pinctrl_probe()
566 mpci->pin_groups = max77620_pingroups; in max77620_pinctrl_probe()
567 mpci->num_pin_groups = ARRAY_SIZE(max77620_pingroups); in max77620_pinctrl_probe()
570 max77620_pinctrl_desc.name = dev_name(&pdev->dev); in max77620_pinctrl_probe()
578 mpci->fps_config[i].active_fps_src = -1; in max77620_pinctrl_probe()
579 mpci->fps_config[i].active_power_up_slots = -1; in max77620_pinctrl_probe()
580 mpci->fps_config[i].active_power_down_slots = -1; in max77620_pinctrl_probe()
581 mpci->fps_config[i].suspend_fps_src = -1; in max77620_pinctrl_probe()
582 mpci->fps_config[i].suspend_power_up_slots = -1; in max77620_pinctrl_probe()
583 mpci->fps_config[i].suspend_power_down_slots = -1; in max77620_pinctrl_probe()
586 mpci->pctl = devm_pinctrl_register(&pdev->dev, &max77620_pinctrl_desc, in max77620_pinctrl_probe()
588 if (IS_ERR(mpci->pctl)) { in max77620_pinctrl_probe()
589 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); in max77620_pinctrl_probe()
590 return PTR_ERR(mpci->pctl); in max77620_pinctrl_probe()
612 int pin, p; in max77620_pinctrl_suspend() local
614 for (pin = 0; pin < MAX77620_PIN_NUM; ++pin) { in max77620_pinctrl_suspend()
615 if ((pin < MAX77620_GPIO1) || (pin > MAX77620_GPIO3)) in max77620_pinctrl_suspend()
619 mpci, pin, max77620_suspend_fps_param[p]); in max77620_pinctrl_suspend()
628 int pin, p; in max77620_pinctrl_resume() local
630 for (pin = 0; pin < MAX77620_PIN_NUM; ++pin) { in max77620_pinctrl_resume()
631 if ((pin < MAX77620_GPIO1) || (pin > MAX77620_GPIO3)) in max77620_pinctrl_resume()
635 mpci, pin, max77620_active_fps_param[p]); in max77620_pinctrl_resume()
648 { .name = "max77620-pinctrl", },
649 { .name = "max20024-pinctrl", },
656 .name = "max77620-pinctrl",
665 MODULE_DESCRIPTION("MAX77620/MAX20024 pin control driver");
668 MODULE_ALIAS("platform:max77620-pinctrl");