| @@ -1905,59 +1905,14 @@ static int pinctrl_check_ops(struct pinctrl_dev *pctldev) · 1904 unmodified lines |
| 1905 | } | 1905 | } |
| 1906 | | 1906 | |
| 1907 | /** | 1907 | /** |
| 1908 | * pinctrl_late_init() - finish pin controller device registration | 1908 | * pinctrl_init_controller() - init a pin controller device |
| 1909 | * @work: work struct | | |
| 1910 | */ | | |
| 1911 | static void pinctrl_late_init(struct work_struct *work) | | |
| 1912 | { | | |
| 1913 | struct pinctrl_dev *pctldev; | | |
| 1914 | | | |
| 1915 | pctldev = container_of(work, struct pinctrl_dev, late_init.work); | | |
| 1916 | | | |
| 1917 | /* | | |
| 1918 | * If the pin controller does NOT have hogs, this will report an | | |
| 1919 | * error and we skip over this entire branch. This is why we can | | |
| 1920 | * call this function directly when we do not have hogs on the | | |
| 1921 | * device. | | |
| 1922 | */ | | |
| 1923 | pctldev->p = create_pinctrl(pctldev->dev, pctldev); | | |
| 1924 | if (!IS_ERR(pctldev->p)) { | | |
| 1925 | kref_get(&pctldev->p->users); | | |
| 1926 | pctldev->hog_default = | | |
| 1927 | pinctrl_lookup_state(pctldev->p, PINCTRL_STATE_DEFAULT); | | |
| 1928 | if (IS_ERR(pctldev->hog_default)) { | | |
| 1929 | dev_dbg(pctldev->dev, | | |
| 1930 | "failed to lookup the default state\n"); | | |
| 1931 | } else { | | |
| 1932 | if (pinctrl_select_state(pctldev->p, | | |
| 1933 | pctldev->hog_default)) | | |
| 1934 | dev_err(pctldev->dev, | | |
| 1935 | "failed to select default state\n"); | | |
| 1936 | } | | |
| 1937 | | | |
| 1938 | pctldev->hog_sleep = | | |
| 1939 | pinctrl_lookup_state(pctldev->p, | | |
| 1940 | PINCTRL_STATE_SLEEP); | | |
| 1941 | if (IS_ERR(pctldev->hog_sleep)) | | |
| 1942 | dev_dbg(pctldev->dev, | | |
| 1943 | "failed to lookup the sleep state\n"); | | |
| 1944 | } | | |
| 1945 | | | |
| 1946 | mutex_lock(&pinctrldev_list_mutex); | | |
| 1947 | list_add_tail(&pctldev->node, &pinctrldev_list); | | |
| 1948 | mutex_unlock(&pinctrldev_list_mutex); | | |
| 1949 | | | |
| 1950 | pinctrl_init_device_debugfs(pctldev); | | |
| 1951 | } | | |
| 1952 | | | |
| 1953 | /** | | |
| 1954 | * pinctrl_register() - register a pin controller device | | |
| 1955 | * @pctldesc: descriptor for this pin controller | 1909 | * @pctldesc: descriptor for this pin controller |
| 1956 | * @dev: parent device for this pin controller | 1910 | * @dev: parent device for this pin controller |
| 1957 | * @driver_data: private pin controller data for this pin controller | 1911 | * @driver_data: private pin controller data for this pin controller |
| 1958 | */ | 1912 | */ |
| 1959 | struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc, | 1913 | struct pinctrl_dev *pinctrl_init_controller(struct pinctrl_desc *pctldesc, |
| 1960 | struct device *dev, void *driver_data) | 1914 | struct device *dev, |
| | 1915 | void *driver_data) |
| 1961 | { | 1916 | { |
| 1962 | struct pinctrl_dev *pctldev; | 1917 | struct pinctrl_dev *pctldev; |
| 1963 | int ret; | 1918 | int ret; |
| @@ -1983,7 +1938,6 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc, · 19 unmodified lines |
| 1983 | INIT_RADIX_TREE(&pctldev->pin_function_tree, GFP_KERNEL); | 1938 | INIT_RADIX_TREE(&pctldev->pin_function_tree, GFP_KERNEL); |
| 1984 | #endif | 1939 | #endif |
| 1985 | INIT_LIST_HEAD(&pctldev->gpio_ranges); | 1940 | INIT_LIST_HEAD(&pctldev->gpio_ranges); |
| 1986 | INIT_DELAYED_WORK(&pctldev->late_init, pinctrl_late_init); | | |
| 1987 | pctldev->dev = dev; | 1941 | pctldev->dev = dev; |
| 1988 | mutex_init(&pctldev->mutex); | 1942 | mutex_init(&pctldev->mutex); |
| 1989 | | 1943 | |
| @@ -2018,17 +1972,6 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc, · 28 unmodified lines |
| 2018 | goto out_err; | 1972 | goto out_err; |
| 2019 | } | 1973 | } |
| 2020 | | 1974 | |
| 2021 | /* | | |
| 2022 | * If the device has hogs we want the probe() function of the driver | | |
| 2023 | * to complete before we go in and hog them and add the pin controller | | |
| 2024 | * to the list of controllers. If it has no hogs, we can just complete | | |
| 2025 | * the registration immediately. | | |
| 2026 | */ | | |
| 2027 | if (pinctrl_dt_has_hogs(pctldev)) | | |
| 2028 | schedule_delayed_work(&pctldev->late_init, 0); | | |
| 2029 | else | | |
| 2030 | pinctrl_late_init(&pctldev->late_init.work); | | |
| 2031 | | | |
| 2032 | return pctldev; | 1975 | return pctldev; |
| 2033 | | 1976 | |
| 2034 | out_err: | 1977 | out_err: |
| @@ -2036,8 +1979,107 @@ out_err: · 1 unmodified line |
| 2036 | kfree(pctldev); | 1979 | kfree(pctldev); |
| 2037 | return ERR_PTR(ret); | 1980 | return ERR_PTR(ret); |
| 2038 | } | 1981 | } |
| | 1982 | |
| | 1983 | static int pinctrl_create_and_start(struct pinctrl_dev *pctldev) |
| | 1984 | { |
| | 1985 | pctldev->p = create_pinctrl(pctldev->dev, pctldev); |
| | 1986 | if (!IS_ERR(pctldev->p)) { |
| | 1987 | kref_get(&pctldev->p->users); |
| | 1988 | pctldev->hog_default = |
| | 1989 | pinctrl_lookup_state(pctldev->p, PINCTRL_STATE_DEFAULT); |
| | 1990 | if (IS_ERR(pctldev->hog_default)) { |
| | 1991 | dev_dbg(pctldev->dev, |
| | 1992 | "failed to lookup the default state\n"); |
| | 1993 | } else { |
| | 1994 | if (pinctrl_select_state(pctldev->p, |
| | 1995 | pctldev->hog_default)) |
| | 1996 | dev_err(pctldev->dev, |
| | 1997 | "failed to select default state\n"); |
| | 1998 | } |
| | 1999 | |
| | 2000 | pctldev->hog_sleep = |
| | 2001 | pinctrl_lookup_state(pctldev->p, |
| | 2002 | PINCTRL_STATE_SLEEP); |
| | 2003 | if (IS_ERR(pctldev->hog_sleep)) |
| | 2004 | dev_dbg(pctldev->dev, |
| | 2005 | "failed to lookup the sleep state\n"); |
| | 2006 | } |
| | 2007 | |
| | 2008 | mutex_lock(&pinctrldev_list_mutex); |
| | 2009 | list_add_tail(&pctldev->node, &pinctrldev_list); |
| | 2010 | mutex_unlock(&pinctrldev_list_mutex); |
| | 2011 | |
| | 2012 | pinctrl_init_device_debugfs(pctldev); |
| | 2013 | |
| | 2014 | return 0; |
| | 2015 | } |
| | 2016 | |
| | 2017 | /** |
| | 2018 | * pinctrl_register() - register a pin controller device |
| | 2019 | * @pctldesc: descriptor for this pin controller |
| | 2020 | * @dev: parent device for this pin controller |
| | 2021 | * @driver_data: private pin controller data for this pin controller |
| | 2022 | * |
| | 2023 | * Note that pinctrl_register() is known to have problems as the pin |
| | 2024 | * controller driver functions are called before the driver has a |
| | 2025 | * struct pinctrl_dev handle. To avoid issues later on, please use the |
| | 2026 | * new pinctrl_register_and_init() below instead. |
| | 2027 | */ |
| | 2028 | struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc, |
| | 2029 | struct device *dev, void *driver_data) |
| | 2030 | { |
| | 2031 | struct pinctrl_dev *pctldev; |
| | 2032 | int error; |
| | 2033 | |
| | 2034 | pctldev = pinctrl_init_controller(pctldesc, dev, driver_data); |
| | 2035 | if (IS_ERR(pctldev)) |
| | 2036 | return pctldev; |
| | 2037 | |
| | 2038 | error = pinctrl_create_and_start(pctldev); |
| | 2039 | if (error) { |
| | 2040 | mutex_destroy(&pctldev->mutex); |
| | 2041 | kfree(pctldev); |
| | 2042 | |
| | 2043 | return ERR_PTR(error); |
| | 2044 | } |
| | 2045 | |
| | 2046 | return pctldev; |
| | 2047 | |
| | 2048 | } |
| 2039 | EXPORT_SYMBOL_GPL(pinctrl_register); | 2049 | EXPORT_SYMBOL_GPL(pinctrl_register); |
| 2040 | | 2050 | |
| | 2051 | int pinctrl_register_and_init(struct pinctrl_desc *pctldesc, |
| | 2052 | struct device *dev, void *driver_data, |
| | 2053 | struct pinctrl_dev **pctldev) |
| | 2054 | { |
| | 2055 | struct pinctrl_dev *p; |
| | 2056 | int error; |
| | 2057 | |
| | 2058 | p = pinctrl_init_controller(pctldesc, dev, driver_data); |
| | 2059 | if (IS_ERR(p)) |
| | 2060 | return PTR_ERR(p); |
| | 2061 | |
| | 2062 | /* |
| | 2063 | * We have pinctrl_start() call functions in the pin controller |
| | 2064 | * driver with create_pinctrl() for at least dt_node_to_map(). So |
| | 2065 | * let's make sure pctldev is properly initialized for the |
| | 2066 | * pin controller driver before we do anything. |
| | 2067 | */ |
| | 2068 | *pctldev = p; |
| | 2069 | |
| | 2070 | error = pinctrl_create_and_start(p); |
| | 2071 | if (error) { |
| | 2072 | mutex_destroy(&p->mutex); |
| | 2073 | kfree(p); |
| | 2074 | *pctldev = NULL; |
| | 2075 | |
| | 2076 | return error; |
| | 2077 | } |
| | 2078 | |
| | 2079 | return 0; |
| | 2080 | } |
| | 2081 | EXPORT_SYMBOL_GPL(pinctrl_register_and_init); |
| | 2082 | |
| 2041 | /** | 2083 | /** |
| 2042 | * pinctrl_unregister() - unregister pinmux | 2084 | * pinctrl_unregister() - unregister pinmux |
| 2043 | * @pctldev: pin controller to unregister | 2085 | * @pctldev: pin controller to unregister |
| @@ -2052,7 +2094,6 @@ void pinctrl_unregister(struct pinctrl_dev *pctldev) · 8 unmodified lines |
| 2052 | if (pctldev == NULL) | 2094 | if (pctldev == NULL) |
| 2053 | return; | 2095 | return; |
| 2054 | | 2096 | |
| 2055 | cancel_delayed_work_sync(&pctldev->late_init); | | |
| 2056 | mutex_lock(&pctldev->mutex); | 2097 | mutex_lock(&pctldev->mutex); |
| 2057 | pinctrl_remove_device_debugfs(pctldev); | 2098 | pinctrl_remove_device_debugfs(pctldev); |
| 2058 | mutex_unlock(&pctldev->mutex); | 2099 | mutex_unlock(&pctldev->mutex); |
| @@ -2133,6 +2174,42 @@ struct pinctrl_dev *devm_pinctrl_register(struct device *dev, · 74 unmodified lines |
| 2133 | } | 2174 | } |
| 2134 | EXPORT_SYMBOL_GPL(devm_pinctrl_register); | 2175 | EXPORT_SYMBOL_GPL(devm_pinctrl_register); |
| 2135 | | 2176 | |
| | 2177 | /** |
| | 2178 | * devm_pinctrl_register_and_init() - Resource managed pinctrl register and init |
| | 2179 | * @dev: parent device for this pin controller |
| | 2180 | * @pctldesc: descriptor for this pin controller |
| | 2181 | * @driver_data: private pin controller data for this pin controller |
| | 2182 | * |
| | 2183 | * Returns an error pointer if pincontrol register failed. Otherwise |
| | 2184 | * it returns valid pinctrl handle. |
| | 2185 | * |
| | 2186 | * The pinctrl device will be automatically released when the device is unbound. |
| | 2187 | */ |
| | 2188 | int devm_pinctrl_register_and_init(struct device *dev, |
| | 2189 | struct pinctrl_desc *pctldesc, |
| | 2190 | void *driver_data, |
| | 2191 | struct pinctrl_dev **pctldev) |
| | 2192 | { |
| | 2193 | struct pinctrl_dev **ptr; |
| | 2194 | int error; |
| | 2195 | |
| | 2196 | ptr = devres_alloc(devm_pinctrl_dev_release, sizeof(*ptr), GFP_KERNEL); |
| | 2197 | if (!ptr) |
| | 2198 | return -ENOMEM; |
| | 2199 | |
| | 2200 | error = pinctrl_register_and_init(pctldesc, dev, driver_data, pctldev); |
| | 2201 | if (error) { |
| | 2202 | devres_free(ptr); |
| | 2203 | return error; |
| | 2204 | } |
| | 2205 | |
| | 2206 | *ptr = *pctldev; |
| | 2207 | devres_add(dev, ptr); |
| | 2208 | |
| | 2209 | return 0; |
| | 2210 | } |
| | 2211 | EXPORT_SYMBOL_GPL(devm_pinctrl_register_and_init); |
| | 2212 | |
| 2136 | /** | 2213 | /** |
| 2137 | * devm_pinctrl_unregister() - Resource managed version of pinctrl_unregister(). | 2214 | * devm_pinctrl_unregister() - Resource managed version of pinctrl_unregister(). |
| 2138 | * @dev: device for which which resource was allocated | 2215 | * @dev: device for which which resource was allocated |