pinctrl.c (2732B)
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Driver core interface to the pinctrl subsystem. 4 * 5 * Copyright (C) 2012 ST-Ericsson SA 6 * Written on behalf of Linaro for ST-Ericsson 7 * Based on bits of regulator core, gpio core and clk core 8 * 9 * Author: Linus Walleij <linus.walleij@linaro.org> 10 */ 11 12#include <linux/device.h> 13#include <linux/pinctrl/devinfo.h> 14#include <linux/pinctrl/consumer.h> 15#include <linux/slab.h> 16 17/** 18 * pinctrl_bind_pins() - called by the device core before probe 19 * @dev: the device that is just about to probe 20 */ 21int pinctrl_bind_pins(struct device *dev) 22{ 23 int ret; 24 25 if (dev->of_node_reused) 26 return 0; 27 28 dev->pins = devm_kzalloc(dev, sizeof(*(dev->pins)), GFP_KERNEL); 29 if (!dev->pins) 30 return -ENOMEM; 31 32 dev->pins->p = devm_pinctrl_get(dev); 33 if (IS_ERR(dev->pins->p)) { 34 dev_dbg(dev, "no pinctrl handle\n"); 35 ret = PTR_ERR(dev->pins->p); 36 goto cleanup_alloc; 37 } 38 39 dev->pins->default_state = pinctrl_lookup_state(dev->pins->p, 40 PINCTRL_STATE_DEFAULT); 41 if (IS_ERR(dev->pins->default_state)) { 42 dev_dbg(dev, "no default pinctrl state\n"); 43 ret = 0; 44 goto cleanup_get; 45 } 46 47 dev->pins->init_state = pinctrl_lookup_state(dev->pins->p, 48 PINCTRL_STATE_INIT); 49 if (IS_ERR(dev->pins->init_state)) { 50 /* Not supplying this state is perfectly legal */ 51 dev_dbg(dev, "no init pinctrl state\n"); 52 53 ret = pinctrl_select_state(dev->pins->p, 54 dev->pins->default_state); 55 } else { 56 ret = pinctrl_select_state(dev->pins->p, dev->pins->init_state); 57 } 58 59 if (ret) { 60 dev_dbg(dev, "failed to activate initial pinctrl state\n"); 61 goto cleanup_get; 62 } 63 64#ifdef CONFIG_PM 65 /* 66 * If power management is enabled, we also look for the optional 67 * sleep and idle pin states, with semantics as defined in 68 * <linux/pinctrl/pinctrl-state.h> 69 */ 70 dev->pins->sleep_state = pinctrl_lookup_state(dev->pins->p, 71 PINCTRL_STATE_SLEEP); 72 if (IS_ERR(dev->pins->sleep_state)) 73 /* Not supplying this state is perfectly legal */ 74 dev_dbg(dev, "no sleep pinctrl state\n"); 75 76 dev->pins->idle_state = pinctrl_lookup_state(dev->pins->p, 77 PINCTRL_STATE_IDLE); 78 if (IS_ERR(dev->pins->idle_state)) 79 /* Not supplying this state is perfectly legal */ 80 dev_dbg(dev, "no idle pinctrl state\n"); 81#endif 82 83 return 0; 84 85 /* 86 * If no pinctrl handle or default state was found for this device, 87 * let's explicitly free the pin container in the device, there is 88 * no point in keeping it around. 89 */ 90cleanup_get: 91 devm_pinctrl_put(dev->pins->p); 92cleanup_alloc: 93 devm_kfree(dev, dev->pins); 94 dev->pins = NULL; 95 96 /* Return deferrals */ 97 if (ret == -EPROBE_DEFER) 98 return ret; 99 /* Return serious errors */ 100 if (ret == -EINVAL) 101 return ret; 102 /* We ignore errors like -ENOENT meaning no pinctrl state */ 103 104 return 0; 105}