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

pinctrl: cherryview: add handlers for pin_config_group_get/set

Pin config get/set handlers for pin groups were previously not
implemented by this driver. The pin_config_group_set is
particularly useful for applying a common config setting to all
pins in a specified group with a single call, without the caller
needing to reference each individual pin by name.

Signed-off-by: Dan O'Donovan <dan@emutex.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

authored by

Dan O'Donovan and committed by
Linus Walleij
77401d7f ccdf81d0

+42
+42
drivers/pinctrl/intel/pinctrl-cherryview.c
··· 1176 1176 return 0; 1177 1177 } 1178 1178 1179 + static int chv_config_group_get(struct pinctrl_dev *pctldev, 1180 + unsigned int group, 1181 + unsigned long *config) 1182 + { 1183 + const unsigned int *pins; 1184 + unsigned int npins; 1185 + int ret; 1186 + 1187 + ret = chv_get_group_pins(pctldev, group, &pins, &npins); 1188 + if (ret) 1189 + return ret; 1190 + 1191 + ret = chv_config_get(pctldev, pins[0], config); 1192 + if (ret) 1193 + return ret; 1194 + 1195 + return 0; 1196 + } 1197 + 1198 + static int chv_config_group_set(struct pinctrl_dev *pctldev, 1199 + unsigned int group, unsigned long *configs, 1200 + unsigned int num_configs) 1201 + { 1202 + const unsigned int *pins; 1203 + unsigned int npins; 1204 + int i, ret; 1205 + 1206 + ret = chv_get_group_pins(pctldev, group, &pins, &npins); 1207 + if (ret) 1208 + return ret; 1209 + 1210 + for (i = 0; i < npins; i++) { 1211 + ret = chv_config_set(pctldev, pins[i], configs, num_configs); 1212 + if (ret) 1213 + return ret; 1214 + } 1215 + 1216 + return 0; 1217 + } 1218 + 1179 1219 static const struct pinconf_ops chv_pinconf_ops = { 1180 1220 .is_generic = true, 1181 1221 .pin_config_set = chv_config_set, 1182 1222 .pin_config_get = chv_config_get, 1223 + .pin_config_group_get = chv_config_group_get, 1224 + .pin_config_group_set = chv_config_group_set, 1183 1225 }; 1184 1226 1185 1227 static struct pinctrl_desc chv_pinctrl_desc = {