summaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl/pinctrl-axp209.c
diff options
context:
space:
mode:
authorQuentin Schulz <quentin.schulz@free-electrons.com>2017-12-05 09:46:43 -0500
committerLinus Walleij <linus.walleij@linaro.org>2017-12-07 04:06:57 -0500
commitd242e60c7d59fb95a9349d1487cfb3ddf6eebdde (patch)
treeba69c795f7518ac38fe5d3871f2a2e1bb0c6d3be /drivers/pinctrl/pinctrl-axp209.c
parentf17aea430fff4b95ac94e8625096cd82544e9054 (diff)
pinctrl: axp209: rename everything from gpio to pctl
This driver used to do only GPIO features of the GPIOs in X-Powers AXP20X. Now that we have migrated everything to the pinctrl subsystem and added pinctrl features, rename everything related to pinctrl from gpio to pctl to ease the understanding of differences between GPIO and pinctrl features. Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl/pinctrl-axp209.c')
-rw-r--r--drivers/pinctrl/pinctrl-axp209.c176
1 files changed, 88 insertions, 88 deletions
diff --git a/drivers/pinctrl/pinctrl-axp209.c b/drivers/pinctrl/pinctrl-axp209.c
index 48cb57dcc575..17eeb0410a5b 100644
--- a/drivers/pinctrl/pinctrl-axp209.c
+++ b/drivers/pinctrl/pinctrl-axp209.c
@@ -57,7 +57,7 @@ struct axp20x_pinctrl_function {
57 unsigned int ngroups; 57 unsigned int ngroups;
58}; 58};
59 59
60struct axp20x_gpio { 60struct axp20x_pctl {
61 struct gpio_chip chip; 61 struct gpio_chip chip;
62 struct regmap *regmap; 62 struct regmap *regmap;
63 struct pinctrl_dev *pctl_dev; 63 struct pinctrl_dev *pctl_dev;
@@ -100,11 +100,11 @@ static int axp20x_gpio_input(struct gpio_chip *chip, unsigned int offset)
100 100
101static int axp20x_gpio_get(struct gpio_chip *chip, unsigned int offset) 101static int axp20x_gpio_get(struct gpio_chip *chip, unsigned int offset)
102{ 102{
103 struct axp20x_gpio *gpio = gpiochip_get_data(chip); 103 struct axp20x_pctl *pctl = gpiochip_get_data(chip);
104 unsigned int val; 104 unsigned int val;
105 int ret; 105 int ret;
106 106
107 ret = regmap_read(gpio->regmap, AXP20X_GPIO20_SS, &val); 107 ret = regmap_read(pctl->regmap, AXP20X_GPIO20_SS, &val);
108 if (ret) 108 if (ret)
109 return ret; 109 return ret;
110 110
@@ -114,7 +114,7 @@ static int axp20x_gpio_get(struct gpio_chip *chip, unsigned int offset)
114static int axp20x_gpio_get_direction(struct gpio_chip *chip, 114static int axp20x_gpio_get_direction(struct gpio_chip *chip,
115 unsigned int offset) 115 unsigned int offset)
116{ 116{
117 struct axp20x_gpio *gpio = gpiochip_get_data(chip); 117 struct axp20x_pctl *pctl = gpiochip_get_data(chip);
118 unsigned int val; 118 unsigned int val;
119 int reg, ret; 119 int reg, ret;
120 120
@@ -122,7 +122,7 @@ static int axp20x_gpio_get_direction(struct gpio_chip *chip,
122 if (reg < 0) 122 if (reg < 0)
123 return reg; 123 return reg;
124 124
125 ret = regmap_read(gpio->regmap, reg, &val); 125 ret = regmap_read(pctl->regmap, reg, &val);
126 if (ret) 126 if (ret)
127 return ret; 127 return ret;
128 128
@@ -152,14 +152,14 @@ static int axp20x_gpio_output(struct gpio_chip *chip, unsigned int offset,
152static void axp20x_gpio_set(struct gpio_chip *chip, unsigned int offset, 152static void axp20x_gpio_set(struct gpio_chip *chip, unsigned int offset,
153 int value) 153 int value)
154{ 154{
155 struct axp20x_gpio *gpio = gpiochip_get_data(chip); 155 struct axp20x_pctl *pctl = gpiochip_get_data(chip);
156 int reg; 156 int reg;
157 157
158 reg = axp20x_gpio_get_reg(offset); 158 reg = axp20x_gpio_get_reg(offset);
159 if (reg < 0) 159 if (reg < 0)
160 return; 160 return;
161 161
162 regmap_update_bits(gpio->regmap, reg, 162 regmap_update_bits(pctl->regmap, reg,
163 AXP20X_GPIO_FUNCTIONS, 163 AXP20X_GPIO_FUNCTIONS,
164 value ? AXP20X_GPIO_FUNCTION_OUT_HIGH : 164 value ? AXP20X_GPIO_FUNCTION_OUT_HIGH :
165 AXP20X_GPIO_FUNCTION_OUT_LOW); 165 AXP20X_GPIO_FUNCTION_OUT_LOW);
@@ -168,30 +168,30 @@ static void axp20x_gpio_set(struct gpio_chip *chip, unsigned int offset,
168static int axp20x_pmx_set(struct pinctrl_dev *pctldev, unsigned int offset, 168static int axp20x_pmx_set(struct pinctrl_dev *pctldev, unsigned int offset,
169 u8 config) 169 u8 config)
170{ 170{
171 struct axp20x_gpio *gpio = pinctrl_dev_get_drvdata(pctldev); 171 struct axp20x_pctl *pctl = pinctrl_dev_get_drvdata(pctldev);
172 int reg; 172 int reg;
173 173
174 reg = axp20x_gpio_get_reg(offset); 174 reg = axp20x_gpio_get_reg(offset);
175 if (reg < 0) 175 if (reg < 0)
176 return reg; 176 return reg;
177 177
178 return regmap_update_bits(gpio->regmap, reg, AXP20X_GPIO_FUNCTIONS, 178 return regmap_update_bits(pctl->regmap, reg, AXP20X_GPIO_FUNCTIONS,
179 config); 179 config);
180} 180}
181 181
182static int axp20x_pmx_func_cnt(struct pinctrl_dev *pctldev) 182static int axp20x_pmx_func_cnt(struct pinctrl_dev *pctldev)
183{ 183{
184 struct axp20x_gpio *gpio = pinctrl_dev_get_drvdata(pctldev); 184 struct axp20x_pctl *pctl = pinctrl_dev_get_drvdata(pctldev);
185 185
186 return ARRAY_SIZE(gpio->funcs); 186 return ARRAY_SIZE(pctl->funcs);
187} 187}
188 188
189static const char *axp20x_pmx_func_name(struct pinctrl_dev *pctldev, 189static const char *axp20x_pmx_func_name(struct pinctrl_dev *pctldev,
190 unsigned int selector) 190 unsigned int selector)
191{ 191{
192 struct axp20x_gpio *gpio = pinctrl_dev_get_drvdata(pctldev); 192 struct axp20x_pctl *pctl = pinctrl_dev_get_drvdata(pctldev);
193 193
194 return gpio->funcs[selector].name; 194 return pctl->funcs[selector].name;
195} 195}
196 196
197static int axp20x_pmx_func_groups(struct pinctrl_dev *pctldev, 197static int axp20x_pmx_func_groups(struct pinctrl_dev *pctldev,
@@ -199,10 +199,10 @@ static int axp20x_pmx_func_groups(struct pinctrl_dev *pctldev,
199 const char * const **groups, 199 const char * const **groups,
200 unsigned int *num_groups) 200 unsigned int *num_groups)
201{ 201{
202 struct axp20x_gpio *gpio = pinctrl_dev_get_drvdata(pctldev); 202 struct axp20x_pctl *pctl = pinctrl_dev_get_drvdata(pctldev);
203 203
204 *groups = gpio->funcs[selector].groups; 204 *groups = pctl->funcs[selector].groups;
205 *num_groups = gpio->funcs[selector].ngroups; 205 *num_groups = pctl->funcs[selector].ngroups;
206 206
207 return 0; 207 return 0;
208} 208}
@@ -210,18 +210,18 @@ static int axp20x_pmx_func_groups(struct pinctrl_dev *pctldev,
210static int axp20x_pmx_set_mux(struct pinctrl_dev *pctldev, 210static int axp20x_pmx_set_mux(struct pinctrl_dev *pctldev,
211 unsigned int function, unsigned int group) 211 unsigned int function, unsigned int group)
212{ 212{
213 struct axp20x_gpio *gpio = pinctrl_dev_get_drvdata(pctldev); 213 struct axp20x_pctl *pctl = pinctrl_dev_get_drvdata(pctldev);
214 unsigned int mask; 214 unsigned int mask;
215 215
216 /* Every pin supports GPIO_OUT and GPIO_IN functions */ 216 /* Every pin supports GPIO_OUT and GPIO_IN functions */
217 if (function <= AXP20X_FUNC_GPIO_IN) 217 if (function <= AXP20X_FUNC_GPIO_IN)
218 return axp20x_pmx_set(pctldev, group, 218 return axp20x_pmx_set(pctldev, group,
219 gpio->funcs[function].muxval); 219 pctl->funcs[function].muxval);
220 220
221 if (function == AXP20X_FUNC_LDO) 221 if (function == AXP20X_FUNC_LDO)
222 mask = gpio->desc->ldo_mask; 222 mask = pctl->desc->ldo_mask;
223 else 223 else
224 mask = gpio->desc->adc_mask; 224 mask = pctl->desc->adc_mask;
225 225
226 if (!(BIT(group) & mask)) 226 if (!(BIT(group) & mask))
227 return -EINVAL; 227 return -EINVAL;
@@ -235,21 +235,21 @@ static int axp20x_pmx_set_mux(struct pinctrl_dev *pctldev,
235 if (function == AXP20X_FUNC_LDO) 235 if (function == AXP20X_FUNC_LDO)
236 return 0; 236 return 0;
237 237
238 return axp20x_pmx_set(pctldev, group, gpio->funcs[function].muxval); 238 return axp20x_pmx_set(pctldev, group, pctl->funcs[function].muxval);
239} 239}
240 240
241static int axp20x_pmx_gpio_set_direction(struct pinctrl_dev *pctldev, 241static int axp20x_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
242 struct pinctrl_gpio_range *range, 242 struct pinctrl_gpio_range *range,
243 unsigned int offset, bool input) 243 unsigned int offset, bool input)
244{ 244{
245 struct axp20x_gpio *gpio = pinctrl_dev_get_drvdata(pctldev); 245 struct axp20x_pctl *pctl = pinctrl_dev_get_drvdata(pctldev);
246 246
247 if (input) 247 if (input)
248 return axp20x_pmx_set(pctldev, offset, 248 return axp20x_pmx_set(pctldev, offset,
249 gpio->funcs[AXP20X_FUNC_GPIO_IN].muxval); 249 pctl->funcs[AXP20X_FUNC_GPIO_IN].muxval);
250 250
251 return axp20x_pmx_set(pctldev, offset, 251 return axp20x_pmx_set(pctldev, offset,
252 gpio->funcs[AXP20X_FUNC_GPIO_OUT].muxval); 252 pctl->funcs[AXP20X_FUNC_GPIO_OUT].muxval);
253} 253}
254 254
255static const struct pinmux_ops axp20x_pmx_ops = { 255static const struct pinmux_ops axp20x_pmx_ops = {
@@ -263,17 +263,17 @@ static const struct pinmux_ops axp20x_pmx_ops = {
263 263
264static int axp20x_groups_cnt(struct pinctrl_dev *pctldev) 264static int axp20x_groups_cnt(struct pinctrl_dev *pctldev)
265{ 265{
266 struct axp20x_gpio *gpio = pinctrl_dev_get_drvdata(pctldev); 266 struct axp20x_pctl *pctl = pinctrl_dev_get_drvdata(pctldev);
267 267
268 return gpio->desc->npins; 268 return pctl->desc->npins;
269} 269}
270 270
271static int axp20x_group_pins(struct pinctrl_dev *pctldev, unsigned int selector, 271static int axp20x_group_pins(struct pinctrl_dev *pctldev, unsigned int selector,
272 const unsigned int **pins, unsigned int *num_pins) 272 const unsigned int **pins, unsigned int *num_pins)
273{ 273{
274 struct axp20x_gpio *gpio = pinctrl_dev_get_drvdata(pctldev); 274 struct axp20x_pctl *pctl = pinctrl_dev_get_drvdata(pctldev);
275 275
276 *pins = (unsigned int *)&gpio->desc->pins[selector]; 276 *pins = (unsigned int *)&pctl->desc->pins[selector];
277 *num_pins = 1; 277 *num_pins = 1;
278 278
279 return 0; 279 return 0;
@@ -282,9 +282,9 @@ static int axp20x_group_pins(struct pinctrl_dev *pctldev, unsigned int selector,
282static const char *axp20x_group_name(struct pinctrl_dev *pctldev, 282static const char *axp20x_group_name(struct pinctrl_dev *pctldev,
283 unsigned int selector) 283 unsigned int selector)
284{ 284{
285 struct axp20x_gpio *gpio = pinctrl_dev_get_drvdata(pctldev); 285 struct axp20x_pctl *pctl = pinctrl_dev_get_drvdata(pctldev);
286 286
287 return gpio->desc->pins[selector].name; 287 return pctl->desc->pins[selector].name;
288} 288}
289 289
290static const struct pinctrl_ops axp20x_pctrl_ops = { 290static const struct pinctrl_ops axp20x_pctrl_ops = {
@@ -319,44 +319,44 @@ static void axp20x_funcs_groups_from_mask(struct device *dev, unsigned int mask,
319 319
320static void axp20x_build_funcs_groups(struct platform_device *pdev) 320static void axp20x_build_funcs_groups(struct platform_device *pdev)
321{ 321{
322 struct axp20x_gpio *gpio = platform_get_drvdata(pdev); 322 struct axp20x_pctl *pctl = platform_get_drvdata(pdev);
323 int i, pin, npins = gpio->desc->npins; 323 int i, pin, npins = pctl->desc->npins;
324 324
325 gpio->funcs[AXP20X_FUNC_GPIO_OUT].name = "gpio_out"; 325 pctl->funcs[AXP20X_FUNC_GPIO_OUT].name = "gpio_out";
326 gpio->funcs[AXP20X_FUNC_GPIO_OUT].muxval = AXP20X_MUX_GPIO_OUT; 326 pctl->funcs[AXP20X_FUNC_GPIO_OUT].muxval = AXP20X_MUX_GPIO_OUT;
327 gpio->funcs[AXP20X_FUNC_GPIO_IN].name = "gpio_in"; 327 pctl->funcs[AXP20X_FUNC_GPIO_IN].name = "gpio_in";
328 gpio->funcs[AXP20X_FUNC_GPIO_IN].muxval = AXP20X_MUX_GPIO_IN; 328 pctl->funcs[AXP20X_FUNC_GPIO_IN].muxval = AXP20X_MUX_GPIO_IN;
329 gpio->funcs[AXP20X_FUNC_LDO].name = "ldo"; 329 pctl->funcs[AXP20X_FUNC_LDO].name = "ldo";
330 /* 330 /*
331 * Muxval for LDO is useless as we won't use it. 331 * Muxval for LDO is useless as we won't use it.
332 * See comment in axp20x_pmx_set_mux. 332 * See comment in axp20x_pmx_set_mux.
333 */ 333 */
334 gpio->funcs[AXP20X_FUNC_ADC].name = "adc"; 334 pctl->funcs[AXP20X_FUNC_ADC].name = "adc";
335 gpio->funcs[AXP20X_FUNC_ADC].muxval = AXP20X_MUX_ADC; 335 pctl->funcs[AXP20X_FUNC_ADC].muxval = AXP20X_MUX_ADC;
336 336
337 /* Every pin supports GPIO_OUT and GPIO_IN functions */ 337 /* Every pin supports GPIO_OUT and GPIO_IN functions */
338 for (i = 0; i <= AXP20X_FUNC_GPIO_IN; i++) { 338 for (i = 0; i <= AXP20X_FUNC_GPIO_IN; i++) {
339 gpio->funcs[i].ngroups = npins; 339 pctl->funcs[i].ngroups = npins;
340 gpio->funcs[i].groups = devm_kzalloc(&pdev->dev, 340 pctl->funcs[i].groups = devm_kzalloc(&pdev->dev,
341 npins * sizeof(char *), 341 npins * sizeof(char *),
342 GFP_KERNEL); 342 GFP_KERNEL);
343 for (pin = 0; pin < npins; pin++) 343 for (pin = 0; pin < npins; pin++)
344 gpio->funcs[i].groups[pin] = gpio->desc->pins[pin].name; 344 pctl->funcs[i].groups[pin] = pctl->desc->pins[pin].name;
345 } 345 }
346 346
347 axp20x_funcs_groups_from_mask(&pdev->dev, gpio->desc->ldo_mask, 347 axp20x_funcs_groups_from_mask(&pdev->dev, pctl->desc->ldo_mask,
348 npins, &gpio->funcs[AXP20X_FUNC_LDO], 348 npins, &pctl->funcs[AXP20X_FUNC_LDO],
349 gpio->desc->pins); 349 pctl->desc->pins);
350 350
351 axp20x_funcs_groups_from_mask(&pdev->dev, gpio->desc->adc_mask, 351 axp20x_funcs_groups_from_mask(&pdev->dev, pctl->desc->adc_mask,
352 npins, &gpio->funcs[AXP20X_FUNC_ADC], 352 npins, &pctl->funcs[AXP20X_FUNC_ADC],
353 gpio->desc->pins); 353 pctl->desc->pins);
354} 354}
355 355
356static int axp20x_gpio_probe(struct platform_device *pdev) 356static int axp20x_pctl_probe(struct platform_device *pdev)
357{ 357{
358 struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent); 358 struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
359 struct axp20x_gpio *gpio; 359 struct axp20x_pctl *pctl;
360 struct pinctrl_desc *pctrl_desc; 360 struct pinctrl_desc *pctrl_desc;
361 int ret; 361 int ret;
362 362
@@ -368,29 +368,29 @@ static int axp20x_gpio_probe(struct platform_device *pdev)
368 return -EINVAL; 368 return -EINVAL;
369 } 369 }
370 370
371 gpio = devm_kzalloc(&pdev->dev, sizeof(*gpio), GFP_KERNEL); 371 pctl = devm_kzalloc(&pdev->dev, sizeof(*pctl), GFP_KERNEL);
372 if (!gpio) 372 if (!pctl)
373 return -ENOMEM; 373 return -ENOMEM;
374 374
375 gpio->chip.base = -1; 375 pctl->chip.base = -1;
376 gpio->chip.can_sleep = true; 376 pctl->chip.can_sleep = true;
377 gpio->chip.request = gpiochip_generic_request; 377 pctl->chip.request = gpiochip_generic_request;
378 gpio->chip.free = gpiochip_generic_free; 378 pctl->chip.free = gpiochip_generic_free;
379 gpio->chip.parent = &pdev->dev; 379 pctl->chip.parent = &pdev->dev;
380 gpio->chip.label = dev_name(&pdev->dev); 380 pctl->chip.label = dev_name(&pdev->dev);
381 gpio->chip.owner = THIS_MODULE; 381 pctl->chip.owner = THIS_MODULE;
382 gpio->chip.get = axp20x_gpio_get; 382 pctl->chip.get = axp20x_gpio_get;
383 gpio->chip.get_direction = axp20x_gpio_get_direction; 383 pctl->chip.get_direction = axp20x_gpio_get_direction;
384 gpio->chip.set = axp20x_gpio_set; 384 pctl->chip.set = axp20x_gpio_set;
385 gpio->chip.direction_input = axp20x_gpio_input; 385 pctl->chip.direction_input = axp20x_gpio_input;
386 gpio->chip.direction_output = axp20x_gpio_output; 386 pctl->chip.direction_output = axp20x_gpio_output;
387 gpio->chip.ngpio = 3; 387 pctl->chip.ngpio = 3;
388 388
389 gpio->desc = &axp20x_data; 389 pctl->desc = &axp20x_data;
390 gpio->regmap = axp20x->regmap; 390 pctl->regmap = axp20x->regmap;
391 gpio->dev = &pdev->dev; 391 pctl->dev = &pdev->dev;
392 392
393 platform_set_drvdata(pdev, gpio); 393 platform_set_drvdata(pdev, pctl);
394 394
395 axp20x_build_funcs_groups(pdev); 395 axp20x_build_funcs_groups(pdev);
396 396
@@ -400,27 +400,27 @@ static int axp20x_gpio_probe(struct platform_device *pdev)
400 400
401 pctrl_desc->name = dev_name(&pdev->dev); 401 pctrl_desc->name = dev_name(&pdev->dev);
402 pctrl_desc->owner = THIS_MODULE; 402 pctrl_desc->owner = THIS_MODULE;
403 pctrl_desc->pins = gpio->desc->pins; 403 pctrl_desc->pins = pctl->desc->pins;
404 pctrl_desc->npins = gpio->desc->npins; 404 pctrl_desc->npins = pctl->desc->npins;
405 pctrl_desc->pctlops = &axp20x_pctrl_ops; 405 pctrl_desc->pctlops = &axp20x_pctrl_ops;
406 pctrl_desc->pmxops = &axp20x_pmx_ops; 406 pctrl_desc->pmxops = &axp20x_pmx_ops;
407 407
408 gpio->pctl_dev = devm_pinctrl_register(&pdev->dev, pctrl_desc, gpio); 408 pctl->pctl_dev = devm_pinctrl_register(&pdev->dev, pctrl_desc, pctl);
409 if (IS_ERR(gpio->pctl_dev)) { 409 if (IS_ERR(pctl->pctl_dev)) {
410 dev_err(&pdev->dev, "couldn't register pinctrl driver\n"); 410 dev_err(&pdev->dev, "couldn't register pinctrl driver\n");
411 return PTR_ERR(gpio->pctl_dev); 411 return PTR_ERR(pctl->pctl_dev);
412 } 412 }
413 413
414 ret = devm_gpiochip_add_data(&pdev->dev, &gpio->chip, gpio); 414 ret = devm_gpiochip_add_data(&pdev->dev, &pctl->chip, pctl);
415 if (ret) { 415 if (ret) {
416 dev_err(&pdev->dev, "Failed to register GPIO chip\n"); 416 dev_err(&pdev->dev, "Failed to register GPIO chip\n");
417 return ret; 417 return ret;
418 } 418 }
419 419
420 ret = gpiochip_add_pin_range(&gpio->chip, dev_name(&pdev->dev), 420 ret = gpiochip_add_pin_range(&pctl->chip, dev_name(&pdev->dev),
421 gpio->desc->pins->number, 421 pctl->desc->pins->number,
422 gpio->desc->pins->number, 422 pctl->desc->pins->number,
423 gpio->desc->npins); 423 pctl->desc->npins);
424 if (ret) { 424 if (ret) {
425 dev_err(&pdev->dev, "failed to add pin range\n"); 425 dev_err(&pdev->dev, "failed to add pin range\n");
426 return ret; 426 return ret;
@@ -431,21 +431,21 @@ static int axp20x_gpio_probe(struct platform_device *pdev)
431 return 0; 431 return 0;
432} 432}
433 433
434static const struct of_device_id axp20x_gpio_match[] = { 434static const struct of_device_id axp20x_pctl_match[] = {
435 { .compatible = "x-powers,axp209-gpio" }, 435 { .compatible = "x-powers,axp209-gpio" },
436 { } 436 { }
437}; 437};
438MODULE_DEVICE_TABLE(of, axp20x_gpio_match); 438MODULE_DEVICE_TABLE(of, axp20x_pctl_match);
439 439
440static struct platform_driver axp20x_gpio_driver = { 440static struct platform_driver axp20x_pctl_driver = {
441 .probe = axp20x_gpio_probe, 441 .probe = axp20x_pctl_probe,
442 .driver = { 442 .driver = {
443 .name = "axp20x-gpio", 443 .name = "axp20x-gpio",
444 .of_match_table = axp20x_gpio_match, 444 .of_match_table = axp20x_pctl_match,
445 }, 445 },
446}; 446};
447 447
448module_platform_driver(axp20x_gpio_driver); 448module_platform_driver(axp20x_pctl_driver);
449 449
450MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>"); 450MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>");
451MODULE_AUTHOR("Quentin Schulz <quentin.schulz@free-electrons.com>"); 451MODULE_AUTHOR("Quentin Schulz <quentin.schulz@free-electrons.com>");