0da4cebebc
The .data field in struct of_device_id is used as a const member so it's inappropriate to attach struct s32_pinctrl_soc_info with of_device_id because some members in s32_pinctrl_soc_info need to be filled by pinctrl-s32cc at runtime. For this reason, struct s32_pinctrl_soc_info must be allocated in pinctrl-s32cc and then create a new struct s32_pinctrl_soc_data in order to represent const .data in of_device_id. To combine these two structures, a s32_pinctrl_soc_data pointer is introduced in s32_pinctrl_soc_info. Besides, use of_device_get_match_data() instead of of_match_device() since the driver only needs to retrieve the .data from of_device_id. Link: https://lore.kernel.org/r/20230329041630.8011-1-clin@suse.com/ Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com> Signed-off-by: Chester Lin <clin@suse.com> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
62 lines
1.5 KiB
C
62 lines
1.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*
|
|
* S32 pinmux core definitions
|
|
*
|
|
* Copyright 2016-2020, 2022 NXP
|
|
* Copyright (C) 2022 SUSE LLC
|
|
* Copyright 2015-2016 Freescale Semiconductor, Inc.
|
|
* Copyright (C) 2012 Linaro Ltd.
|
|
*/
|
|
|
|
#ifndef __DRIVERS_PINCTRL_S32_H
|
|
#define __DRIVERS_PINCTRL_S32_H
|
|
|
|
struct platform_device;
|
|
|
|
/**
|
|
* struct s32_pin_group - describes an S32 pin group
|
|
* @data: generic data describes group name, number of pins, and a pin array in
|
|
this group.
|
|
* @pin_sss: an array of source signal select configs paired with pin array.
|
|
*/
|
|
struct s32_pin_group {
|
|
struct pingroup data;
|
|
unsigned int *pin_sss;
|
|
};
|
|
|
|
/**
|
|
* struct s32_pin_range - pin ID range for each memory region.
|
|
* @start: start pin ID
|
|
* @end: end pin ID
|
|
*/
|
|
struct s32_pin_range {
|
|
unsigned int start;
|
|
unsigned int end;
|
|
};
|
|
|
|
struct s32_pinctrl_soc_data {
|
|
const struct pinctrl_pin_desc *pins;
|
|
unsigned int npins;
|
|
const struct s32_pin_range *mem_pin_ranges;
|
|
unsigned int mem_regions;
|
|
};
|
|
|
|
struct s32_pinctrl_soc_info {
|
|
struct device *dev;
|
|
const struct s32_pinctrl_soc_data *soc_data;
|
|
struct s32_pin_group *groups;
|
|
unsigned int ngroups;
|
|
struct pinfunction *functions;
|
|
unsigned int nfunctions;
|
|
unsigned int grp_index;
|
|
};
|
|
|
|
#define S32_PINCTRL_PIN(pin) PINCTRL_PIN(pin, #pin)
|
|
#define S32_PIN_RANGE(_start, _end) { .start = _start, .end = _end }
|
|
|
|
int s32_pinctrl_probe(struct platform_device *pdev,
|
|
const struct s32_pinctrl_soc_data *soc_data);
|
|
int s32_pinctrl_resume(struct device *dev);
|
|
int s32_pinctrl_suspend(struct device *dev);
|
|
#endif /* __DRIVERS_PINCTRL_S32_H */
|