Commit 5d33e0eb authored by Andy Shevchenko's avatar Andy Shevchenko

pinctrl: baytrail: Reuse struct intel_pinctrl in the driver

We may use now available struct intel_pinctrl in the driver.
No functional change implied.
Acked-by: default avatarHans de Goede <hdegoede@redhat.com>
Acked-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
parent 2c02af70
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
#define BYT_DEFAULT_GPIO_MUX 0 #define BYT_DEFAULT_GPIO_MUX 0
#define BYT_ALTER_GPIO_MUX 1 #define BYT_ALTER_GPIO_MUX 1
struct byt_gpio_pin_context { struct intel_pad_context {
u32 conf0; u32 conf0;
u32 val; u32 val;
}; };
...@@ -105,17 +105,6 @@ struct byt_gpio_pin_context { ...@@ -105,17 +105,6 @@ struct byt_gpio_pin_context {
.pad_map = (map),\ .pad_map = (map),\
} }
struct byt_gpio {
struct device *dev;
struct gpio_chip chip;
struct irq_chip irqchip;
struct pinctrl_dev *pctl_dev;
struct pinctrl_desc pctl_desc;
const struct intel_pinctrl_soc_data *soc_data;
struct intel_community *communities_copy;
struct byt_gpio_pin_context *saved_context;
};
/* SCORE pins, aka GPIOC_<pin_no> or GPIO_S0_SC[<pin_no>] */ /* SCORE pins, aka GPIOC_<pin_no> or GPIO_S0_SC[<pin_no>] */
static const struct pinctrl_pin_desc byt_score_pins[] = { static const struct pinctrl_pin_desc byt_score_pins[] = {
PINCTRL_PIN(0, "SATA_GP0"), PINCTRL_PIN(0, "SATA_GP0"),
...@@ -551,14 +540,14 @@ static const struct intel_pinctrl_soc_data *byt_soc_data[] = { ...@@ -551,14 +540,14 @@ static const struct intel_pinctrl_soc_data *byt_soc_data[] = {
static DEFINE_RAW_SPINLOCK(byt_lock); static DEFINE_RAW_SPINLOCK(byt_lock);
static struct intel_community *byt_get_community(struct byt_gpio *vg, static struct intel_community *byt_get_community(struct intel_pinctrl *vg,
unsigned int pin) unsigned int pin)
{ {
struct intel_community *comm; struct intel_community *comm;
int i; int i;
for (i = 0; i < vg->soc_data->ncommunities; i++) { for (i = 0; i < vg->ncommunities; i++) {
comm = vg->communities_copy + i; comm = vg->communities + i;
if (pin < comm->pin_base + comm->npins && pin >= comm->pin_base) if (pin < comm->pin_base + comm->npins && pin >= comm->pin_base)
return comm; return comm;
} }
...@@ -566,7 +555,7 @@ static struct intel_community *byt_get_community(struct byt_gpio *vg, ...@@ -566,7 +555,7 @@ static struct intel_community *byt_get_community(struct byt_gpio *vg,
return NULL; return NULL;
} }
static void __iomem *byt_gpio_reg(struct byt_gpio *vg, unsigned int offset, static void __iomem *byt_gpio_reg(struct intel_pinctrl *vg, unsigned int offset,
int reg) int reg)
{ {
struct intel_community *comm = byt_get_community(vg, offset); struct intel_community *comm = byt_get_community(vg, offset);
...@@ -593,17 +582,17 @@ static void __iomem *byt_gpio_reg(struct byt_gpio *vg, unsigned int offset, ...@@ -593,17 +582,17 @@ static void __iomem *byt_gpio_reg(struct byt_gpio *vg, unsigned int offset,
static int byt_get_groups_count(struct pinctrl_dev *pctldev) static int byt_get_groups_count(struct pinctrl_dev *pctldev)
{ {
struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
return vg->soc_data->ngroups; return vg->soc->ngroups;
} }
static const char *byt_get_group_name(struct pinctrl_dev *pctldev, static const char *byt_get_group_name(struct pinctrl_dev *pctldev,
unsigned int selector) unsigned int selector)
{ {
struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
return vg->soc_data->groups[selector].name; return vg->soc->groups[selector].name;
} }
static int byt_get_group_pins(struct pinctrl_dev *pctldev, static int byt_get_group_pins(struct pinctrl_dev *pctldev,
...@@ -611,10 +600,10 @@ static int byt_get_group_pins(struct pinctrl_dev *pctldev, ...@@ -611,10 +600,10 @@ static int byt_get_group_pins(struct pinctrl_dev *pctldev,
const unsigned int **pins, const unsigned int **pins,
unsigned int *num_pins) unsigned int *num_pins)
{ {
struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
*pins = vg->soc_data->groups[selector].pins; *pins = vg->soc->groups[selector].pins;
*num_pins = vg->soc_data->groups[selector].npins; *num_pins = vg->soc->groups[selector].npins;
return 0; return 0;
} }
...@@ -627,17 +616,17 @@ static const struct pinctrl_ops byt_pinctrl_ops = { ...@@ -627,17 +616,17 @@ static const struct pinctrl_ops byt_pinctrl_ops = {
static int byt_get_functions_count(struct pinctrl_dev *pctldev) static int byt_get_functions_count(struct pinctrl_dev *pctldev)
{ {
struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
return vg->soc_data->nfunctions; return vg->soc->nfunctions;
} }
static const char *byt_get_function_name(struct pinctrl_dev *pctldev, static const char *byt_get_function_name(struct pinctrl_dev *pctldev,
unsigned int selector) unsigned int selector)
{ {
struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
return vg->soc_data->functions[selector].name; return vg->soc->functions[selector].name;
} }
static int byt_get_function_groups(struct pinctrl_dev *pctldev, static int byt_get_function_groups(struct pinctrl_dev *pctldev,
...@@ -645,15 +634,15 @@ static int byt_get_function_groups(struct pinctrl_dev *pctldev, ...@@ -645,15 +634,15 @@ static int byt_get_function_groups(struct pinctrl_dev *pctldev,
const char * const **groups, const char * const **groups,
unsigned int *num_groups) unsigned int *num_groups)
{ {
struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
*groups = vg->soc_data->functions[selector].groups; *groups = vg->soc->functions[selector].groups;
*num_groups = vg->soc_data->functions[selector].ngroups; *num_groups = vg->soc->functions[selector].ngroups;
return 0; return 0;
} }
static void byt_set_group_simple_mux(struct byt_gpio *vg, static void byt_set_group_simple_mux(struct intel_pinctrl *vg,
const struct intel_pingroup group, const struct intel_pingroup group,
unsigned int func) unsigned int func)
{ {
...@@ -683,7 +672,7 @@ static void byt_set_group_simple_mux(struct byt_gpio *vg, ...@@ -683,7 +672,7 @@ static void byt_set_group_simple_mux(struct byt_gpio *vg,
raw_spin_unlock_irqrestore(&byt_lock, flags); raw_spin_unlock_irqrestore(&byt_lock, flags);
} }
static void byt_set_group_mixed_mux(struct byt_gpio *vg, static void byt_set_group_mixed_mux(struct intel_pinctrl *vg,
const struct intel_pingroup group, const struct intel_pingroup group,
const unsigned int *func) const unsigned int *func)
{ {
...@@ -716,9 +705,9 @@ static void byt_set_group_mixed_mux(struct byt_gpio *vg, ...@@ -716,9 +705,9 @@ static void byt_set_group_mixed_mux(struct byt_gpio *vg,
static int byt_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector, static int byt_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector,
unsigned int group_selector) unsigned int group_selector)
{ {
struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctldev); struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
const struct intel_function func = vg->soc_data->functions[func_selector]; const struct intel_function func = vg->soc->functions[func_selector];
const struct intel_pingroup group = vg->soc_data->groups[group_selector]; const struct intel_pingroup group = vg->soc->groups[group_selector];
if (group.modes) if (group.modes)
byt_set_group_mixed_mux(vg, group, group.modes); byt_set_group_mixed_mux(vg, group, group.modes);
...@@ -730,22 +719,22 @@ static int byt_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector, ...@@ -730,22 +719,22 @@ static int byt_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector,
return 0; return 0;
} }
static u32 byt_get_gpio_mux(struct byt_gpio *vg, unsigned int offset) static u32 byt_get_gpio_mux(struct intel_pinctrl *vg, unsigned int offset)
{ {
/* SCORE pin 92-93 */ /* SCORE pin 92-93 */
if (!strcmp(vg->soc_data->uid, BYT_SCORE_ACPI_UID) && if (!strcmp(vg->soc->uid, BYT_SCORE_ACPI_UID) &&
offset >= 92 && offset <= 93) offset >= 92 && offset <= 93)
return BYT_ALTER_GPIO_MUX; return BYT_ALTER_GPIO_MUX;
/* SUS pin 11-21 */ /* SUS pin 11-21 */
if (!strcmp(vg->soc_data->uid, BYT_SUS_ACPI_UID) && if (!strcmp(vg->soc->uid, BYT_SUS_ACPI_UID) &&
offset >= 11 && offset <= 21) offset >= 11 && offset <= 21)
return BYT_ALTER_GPIO_MUX; return BYT_ALTER_GPIO_MUX;
return BYT_DEFAULT_GPIO_MUX; return BYT_DEFAULT_GPIO_MUX;
} }
static void byt_gpio_clear_triggering(struct byt_gpio *vg, unsigned int offset) static void byt_gpio_clear_triggering(struct intel_pinctrl *vg, unsigned int offset)
{ {
void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG); void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
unsigned long flags; unsigned long flags;
...@@ -762,7 +751,7 @@ static int byt_gpio_request_enable(struct pinctrl_dev *pctl_dev, ...@@ -762,7 +751,7 @@ static int byt_gpio_request_enable(struct pinctrl_dev *pctl_dev,
struct pinctrl_gpio_range *range, struct pinctrl_gpio_range *range,
unsigned int offset) unsigned int offset)
{ {
struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev); struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG); void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
u32 value, gpio_mux; u32 value, gpio_mux;
unsigned long flags; unsigned long flags;
...@@ -799,7 +788,7 @@ static void byt_gpio_disable_free(struct pinctrl_dev *pctl_dev, ...@@ -799,7 +788,7 @@ static void byt_gpio_disable_free(struct pinctrl_dev *pctl_dev,
struct pinctrl_gpio_range *range, struct pinctrl_gpio_range *range,
unsigned int offset) unsigned int offset)
{ {
struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev); struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
byt_gpio_clear_triggering(vg, offset); byt_gpio_clear_triggering(vg, offset);
pm_runtime_put(vg->dev); pm_runtime_put(vg->dev);
...@@ -810,7 +799,7 @@ static int byt_gpio_set_direction(struct pinctrl_dev *pctl_dev, ...@@ -810,7 +799,7 @@ static int byt_gpio_set_direction(struct pinctrl_dev *pctl_dev,
unsigned int offset, unsigned int offset,
bool input) bool input)
{ {
struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev); struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG); void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG); void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
unsigned long flags; unsigned long flags;
...@@ -893,7 +882,7 @@ static int byt_set_pull_strength(u32 *reg, u16 strength) ...@@ -893,7 +882,7 @@ static int byt_set_pull_strength(u32 *reg, u16 strength)
static int byt_pin_config_get(struct pinctrl_dev *pctl_dev, unsigned int offset, static int byt_pin_config_get(struct pinctrl_dev *pctl_dev, unsigned int offset,
unsigned long *config) unsigned long *config)
{ {
struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev); struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
enum pin_config_param param = pinconf_to_config_param(*config); enum pin_config_param param = pinconf_to_config_param(*config);
void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG); void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG); void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
...@@ -978,7 +967,7 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev, ...@@ -978,7 +967,7 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,
unsigned long *configs, unsigned long *configs,
unsigned int num_configs) unsigned int num_configs)
{ {
struct byt_gpio *vg = pinctrl_dev_get_drvdata(pctl_dev); struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
unsigned int param, arg; unsigned int param, arg;
void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG); void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG); void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
...@@ -1115,7 +1104,7 @@ static const struct pinctrl_desc byt_pinctrl_desc = { ...@@ -1115,7 +1104,7 @@ static const struct pinctrl_desc byt_pinctrl_desc = {
static int byt_gpio_get(struct gpio_chip *chip, unsigned int offset) static int byt_gpio_get(struct gpio_chip *chip, unsigned int offset)
{ {
struct byt_gpio *vg = gpiochip_get_data(chip); struct intel_pinctrl *vg = gpiochip_get_data(chip);
void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG); void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
unsigned long flags; unsigned long flags;
u32 val; u32 val;
...@@ -1129,7 +1118,7 @@ static int byt_gpio_get(struct gpio_chip *chip, unsigned int offset) ...@@ -1129,7 +1118,7 @@ static int byt_gpio_get(struct gpio_chip *chip, unsigned int offset)
static void byt_gpio_set(struct gpio_chip *chip, unsigned int offset, int value) static void byt_gpio_set(struct gpio_chip *chip, unsigned int offset, int value)
{ {
struct byt_gpio *vg = gpiochip_get_data(chip); struct intel_pinctrl *vg = gpiochip_get_data(chip);
void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG); void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
unsigned long flags; unsigned long flags;
u32 old_val; u32 old_val;
...@@ -1148,7 +1137,7 @@ static void byt_gpio_set(struct gpio_chip *chip, unsigned int offset, int value) ...@@ -1148,7 +1137,7 @@ static void byt_gpio_set(struct gpio_chip *chip, unsigned int offset, int value)
static int byt_gpio_get_direction(struct gpio_chip *chip, unsigned int offset) static int byt_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
{ {
struct byt_gpio *vg = gpiochip_get_data(chip); struct intel_pinctrl *vg = gpiochip_get_data(chip);
void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG); void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
unsigned long flags; unsigned long flags;
u32 value; u32 value;
...@@ -1188,11 +1177,11 @@ static int byt_gpio_direction_output(struct gpio_chip *chip, ...@@ -1188,11 +1177,11 @@ static int byt_gpio_direction_output(struct gpio_chip *chip,
static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip) static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
{ {
struct byt_gpio *vg = gpiochip_get_data(chip); struct intel_pinctrl *vg = gpiochip_get_data(chip);
int i; int i;
u32 conf0, val; u32 conf0, val;
for (i = 0; i < vg->soc_data->npins; i++) { for (i = 0; i < vg->soc->npins; i++) {
const struct intel_community *comm; const struct intel_community *comm;
const char *pull_str = NULL; const char *pull_str = NULL;
const char *pull = NULL; const char *pull = NULL;
...@@ -1202,7 +1191,7 @@ static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip) ...@@ -1202,7 +1191,7 @@ static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
unsigned int pin; unsigned int pin;
raw_spin_lock_irqsave(&byt_lock, flags); raw_spin_lock_irqsave(&byt_lock, flags);
pin = vg->soc_data->pins[i].number; pin = vg->soc->pins[i].number;
reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG); reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
if (!reg) { if (!reg) {
seq_printf(s, seq_printf(s,
...@@ -1297,7 +1286,7 @@ static const struct gpio_chip byt_gpio_chip = { ...@@ -1297,7 +1286,7 @@ static const struct gpio_chip byt_gpio_chip = {
static void byt_irq_ack(struct irq_data *d) static void byt_irq_ack(struct irq_data *d)
{ {
struct gpio_chip *gc = irq_data_get_irq_chip_data(d); struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
struct byt_gpio *vg = gpiochip_get_data(gc); struct intel_pinctrl *vg = gpiochip_get_data(gc);
unsigned int offset = irqd_to_hwirq(d); unsigned int offset = irqd_to_hwirq(d);
void __iomem *reg; void __iomem *reg;
...@@ -1313,7 +1302,7 @@ static void byt_irq_ack(struct irq_data *d) ...@@ -1313,7 +1302,7 @@ static void byt_irq_ack(struct irq_data *d)
static void byt_irq_mask(struct irq_data *d) static void byt_irq_mask(struct irq_data *d)
{ {
struct gpio_chip *gc = irq_data_get_irq_chip_data(d); struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
struct byt_gpio *vg = gpiochip_get_data(gc); struct intel_pinctrl *vg = gpiochip_get_data(gc);
byt_gpio_clear_triggering(vg, irqd_to_hwirq(d)); byt_gpio_clear_triggering(vg, irqd_to_hwirq(d));
} }
...@@ -1321,7 +1310,7 @@ static void byt_irq_mask(struct irq_data *d) ...@@ -1321,7 +1310,7 @@ static void byt_irq_mask(struct irq_data *d)
static void byt_irq_unmask(struct irq_data *d) static void byt_irq_unmask(struct irq_data *d)
{ {
struct gpio_chip *gc = irq_data_get_irq_chip_data(d); struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
struct byt_gpio *vg = gpiochip_get_data(gc); struct intel_pinctrl *vg = gpiochip_get_data(gc);
unsigned int offset = irqd_to_hwirq(d); unsigned int offset = irqd_to_hwirq(d);
unsigned long flags; unsigned long flags;
void __iomem *reg; void __iomem *reg;
...@@ -1359,7 +1348,7 @@ static void byt_irq_unmask(struct irq_data *d) ...@@ -1359,7 +1348,7 @@ static void byt_irq_unmask(struct irq_data *d)
static int byt_irq_type(struct irq_data *d, unsigned int type) static int byt_irq_type(struct irq_data *d, unsigned int type)
{ {
struct byt_gpio *vg = gpiochip_get_data(irq_data_get_irq_chip_data(d)); struct intel_pinctrl *vg = gpiochip_get_data(irq_data_get_irq_chip_data(d));
u32 offset = irqd_to_hwirq(d); u32 offset = irqd_to_hwirq(d);
u32 value; u32 value;
unsigned long flags; unsigned long flags;
...@@ -1398,8 +1387,7 @@ static int byt_irq_type(struct irq_data *d, unsigned int type) ...@@ -1398,8 +1387,7 @@ static int byt_irq_type(struct irq_data *d, unsigned int type)
static void byt_gpio_irq_handler(struct irq_desc *desc) static void byt_gpio_irq_handler(struct irq_desc *desc)
{ {
struct irq_data *data = irq_desc_get_irq_data(desc); struct irq_data *data = irq_desc_get_irq_data(desc);
struct byt_gpio *vg = gpiochip_get_data( struct intel_pinctrl *vg = gpiochip_get_data(irq_desc_get_handler_data(desc));
irq_desc_get_handler_data(desc));
struct irq_chip *chip = irq_data_get_irq_chip(data); struct irq_chip *chip = irq_data_get_irq_chip(data);
u32 base, pin; u32 base, pin;
void __iomem *reg; void __iomem *reg;
...@@ -1432,7 +1420,7 @@ static void byt_init_irq_valid_mask(struct gpio_chip *chip, ...@@ -1432,7 +1420,7 @@ static void byt_init_irq_valid_mask(struct gpio_chip *chip,
unsigned long *valid_mask, unsigned long *valid_mask,
unsigned int ngpios) unsigned int ngpios)
{ {
struct byt_gpio *vg = gpiochip_get_data(chip); struct intel_pinctrl *vg = gpiochip_get_data(chip);
void __iomem *reg; void __iomem *reg;
u32 value; u32 value;
int i; int i;
...@@ -1442,8 +1430,8 @@ static void byt_init_irq_valid_mask(struct gpio_chip *chip, ...@@ -1442,8 +1430,8 @@ static void byt_init_irq_valid_mask(struct gpio_chip *chip,
* do not use direct IRQ mode. This will prevent spurious * do not use direct IRQ mode. This will prevent spurious
* interrupts from misconfigured pins. * interrupts from misconfigured pins.
*/ */
for (i = 0; i < vg->soc_data->npins; i++) { for (i = 0; i < vg->soc->npins; i++) {
unsigned int pin = vg->soc_data->pins[i].number; unsigned int pin = vg->soc->pins[i].number;
reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG); reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
if (!reg) { if (!reg) {
...@@ -1466,12 +1454,12 @@ static void byt_init_irq_valid_mask(struct gpio_chip *chip, ...@@ -1466,12 +1454,12 @@ static void byt_init_irq_valid_mask(struct gpio_chip *chip,
static int byt_gpio_irq_init_hw(struct gpio_chip *chip) static int byt_gpio_irq_init_hw(struct gpio_chip *chip)
{ {
struct byt_gpio *vg = gpiochip_get_data(chip); struct intel_pinctrl *vg = gpiochip_get_data(chip);
void __iomem *reg; void __iomem *reg;
u32 base, value; u32 base, value;
/* clear interrupt status trigger registers */ /* clear interrupt status trigger registers */
for (base = 0; base < vg->soc_data->npins; base += 32) { for (base = 0; base < vg->soc->npins; base += 32) {
reg = byt_gpio_reg(vg, base, BYT_INT_STAT_REG); reg = byt_gpio_reg(vg, base, BYT_INT_STAT_REG);
if (!reg) { if (!reg) {
...@@ -1496,18 +1484,18 @@ static int byt_gpio_irq_init_hw(struct gpio_chip *chip) ...@@ -1496,18 +1484,18 @@ static int byt_gpio_irq_init_hw(struct gpio_chip *chip)
static int byt_gpio_add_pin_ranges(struct gpio_chip *chip) static int byt_gpio_add_pin_ranges(struct gpio_chip *chip)
{ {
struct byt_gpio *vg = gpiochip_get_data(chip); struct intel_pinctrl *vg = gpiochip_get_data(chip);
struct device *dev = vg->dev; struct device *dev = vg->dev;
int ret; int ret;
ret = gpiochip_add_pin_range(chip, dev_name(dev), 0, 0, vg->soc_data->npins); ret = gpiochip_add_pin_range(chip, dev_name(dev), 0, 0, vg->soc->npins);
if (ret) if (ret)
dev_err(dev, "failed to add GPIO pin range\n"); dev_err(dev, "failed to add GPIO pin range\n");
return ret; return ret;
} }
static int byt_gpio_probe(struct byt_gpio *vg) static int byt_gpio_probe(struct intel_pinctrl *vg)
{ {
struct platform_device *pdev = to_platform_device(vg->dev); struct platform_device *pdev = to_platform_device(vg->dev);
struct gpio_chip *gc; struct gpio_chip *gc;
...@@ -1522,12 +1510,12 @@ static int byt_gpio_probe(struct byt_gpio *vg) ...@@ -1522,12 +1510,12 @@ static int byt_gpio_probe(struct byt_gpio *vg)
gc->can_sleep = false; gc->can_sleep = false;
gc->add_pin_ranges = byt_gpio_add_pin_ranges; gc->add_pin_ranges = byt_gpio_add_pin_ranges;
gc->parent = vg->dev; gc->parent = vg->dev;
gc->ngpio = vg->soc_data->npins; gc->ngpio = vg->soc->npins;
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
vg->saved_context = devm_kcalloc(vg->dev, gc->ngpio, vg->context.pads = devm_kcalloc(vg->dev, gc->ngpio, sizeof(*vg->context.pads),
sizeof(*vg->saved_context), GFP_KERNEL); GFP_KERNEL);
if (!vg->saved_context) if (!vg->context.pads)
return -ENOMEM; return -ENOMEM;
#endif #endif
...@@ -1567,24 +1555,24 @@ static int byt_gpio_probe(struct byt_gpio *vg) ...@@ -1567,24 +1555,24 @@ static int byt_gpio_probe(struct byt_gpio *vg)
return ret; return ret;
} }
static int byt_set_soc_data(struct byt_gpio *vg, static int byt_set_soc_data(struct intel_pinctrl *vg,
const struct intel_pinctrl_soc_data *soc_data) const struct intel_pinctrl_soc_data *soc)
{ {
struct platform_device *pdev = to_platform_device(vg->dev); struct platform_device *pdev = to_platform_device(vg->dev);
int i; int i;
vg->soc_data = soc_data; vg->soc = soc;
vg->communities_copy = devm_kcalloc(vg->dev,
soc_data->ncommunities, vg->ncommunities = vg->soc->ncommunities;
sizeof(*vg->communities_copy), vg->communities = devm_kcalloc(vg->dev, vg->ncommunities,
GFP_KERNEL); sizeof(*vg->communities), GFP_KERNEL);
if (!vg->communities_copy) if (!vg->communities)
return -ENOMEM; return -ENOMEM;
for (i = 0; i < soc_data->ncommunities; i++) { for (i = 0; i < vg->soc->ncommunities; i++) {
struct intel_community *comm = vg->communities_copy + i; struct intel_community *comm = vg->communities + i;
*comm = vg->soc_data->communities[i]; *comm = vg->soc->communities[i];
comm->pad_regs = devm_platform_ioremap_resource(pdev, 0); comm->pad_regs = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(comm->pad_regs)) if (IS_ERR(comm->pad_regs))
...@@ -1606,7 +1594,7 @@ static int byt_pinctrl_probe(struct platform_device *pdev) ...@@ -1606,7 +1594,7 @@ static int byt_pinctrl_probe(struct platform_device *pdev)
const struct intel_pinctrl_soc_data **soc_table; const struct intel_pinctrl_soc_data **soc_table;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct acpi_device *acpi_dev; struct acpi_device *acpi_dev;
struct byt_gpio *vg; struct intel_pinctrl *vg;
int i, ret; int i, ret;
acpi_dev = ACPI_COMPANION(dev); acpi_dev = ACPI_COMPANION(dev);
...@@ -1636,15 +1624,15 @@ static int byt_pinctrl_probe(struct platform_device *pdev) ...@@ -1636,15 +1624,15 @@ static int byt_pinctrl_probe(struct platform_device *pdev)
return ret; return ret;
} }
vg->pctl_desc = byt_pinctrl_desc; vg->pctldesc = byt_pinctrl_desc;
vg->pctl_desc.name = dev_name(dev); vg->pctldesc.name = dev_name(dev);
vg->pctl_desc.pins = vg->soc_data->pins; vg->pctldesc.pins = vg->soc->pins;
vg->pctl_desc.npins = vg->soc_data->npins; vg->pctldesc.npins = vg->soc->npins;
vg->pctl_dev = devm_pinctrl_register(dev, &vg->pctl_desc, vg); vg->pctldev = devm_pinctrl_register(dev, &vg->pctldesc, vg);
if (IS_ERR(vg->pctl_dev)) { if (IS_ERR(vg->pctldev)) {
dev_err(dev, "failed to register pinctrl driver\n"); dev_err(dev, "failed to register pinctrl driver\n");
return PTR_ERR(vg->pctl_dev); return PTR_ERR(vg->pctldev);
} }
ret = byt_gpio_probe(vg); ret = byt_gpio_probe(vg);
...@@ -1660,16 +1648,16 @@ static int byt_pinctrl_probe(struct platform_device *pdev) ...@@ -1660,16 +1648,16 @@ static int byt_pinctrl_probe(struct platform_device *pdev)
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
static int byt_gpio_suspend(struct device *dev) static int byt_gpio_suspend(struct device *dev)
{ {
struct byt_gpio *vg = dev_get_drvdata(dev); struct intel_pinctrl *vg = dev_get_drvdata(dev);
unsigned long flags; unsigned long flags;
int i; int i;
raw_spin_lock_irqsave(&byt_lock, flags); raw_spin_lock_irqsave(&byt_lock, flags);
for (i = 0; i < vg->soc_data->npins; i++) { for (i = 0; i < vg->soc->npins; i++) {
void __iomem *reg; void __iomem *reg;
u32 value; u32 value;
unsigned int pin = vg->soc_data->pins[i].number; unsigned int pin = vg->soc->pins[i].number;
reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG); reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
if (!reg) { if (!reg) {
...@@ -1679,11 +1667,11 @@ static int byt_gpio_suspend(struct device *dev) ...@@ -1679,11 +1667,11 @@ static int byt_gpio_suspend(struct device *dev)
continue; continue;
} }
value = readl(reg) & BYT_CONF0_RESTORE_MASK; value = readl(reg) & BYT_CONF0_RESTORE_MASK;
vg->saved_context[i].conf0 = value; vg->context.pads[i].conf0 = value;
reg = byt_gpio_reg(vg, pin, BYT_VAL_REG); reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
value = readl(reg) & BYT_VAL_RESTORE_MASK; value = readl(reg) & BYT_VAL_RESTORE_MASK;
vg->saved_context[i].val = value; vg->context.pads[i].val = value;
} }
raw_spin_unlock_irqrestore(&byt_lock, flags); raw_spin_unlock_irqrestore(&byt_lock, flags);
...@@ -1692,16 +1680,16 @@ static int byt_gpio_suspend(struct device *dev) ...@@ -1692,16 +1680,16 @@ static int byt_gpio_suspend(struct device *dev)
static int byt_gpio_resume(struct device *dev) static int byt_gpio_resume(struct device *dev)
{ {
struct byt_gpio *vg = dev_get_drvdata(dev); struct intel_pinctrl *vg = dev_get_drvdata(dev);
unsigned long flags; unsigned long flags;
int i; int i;
raw_spin_lock_irqsave(&byt_lock, flags); raw_spin_lock_irqsave(&byt_lock, flags);
for (i = 0; i < vg->soc_data->npins; i++) { for (i = 0; i < vg->soc->npins; i++) {
void __iomem *reg; void __iomem *reg;
u32 value; u32 value;
unsigned int pin = vg->soc_data->pins[i].number; unsigned int pin = vg->soc->pins[i].number;
reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG); reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
if (!reg) { if (!reg) {
...@@ -1712,9 +1700,9 @@ static int byt_gpio_resume(struct device *dev) ...@@ -1712,9 +1700,9 @@ static int byt_gpio_resume(struct device *dev)
} }
value = readl(reg); value = readl(reg);
if ((value & BYT_CONF0_RESTORE_MASK) != if ((value & BYT_CONF0_RESTORE_MASK) !=
vg->saved_context[i].conf0) { vg->context.pads[i].conf0) {
value &= ~BYT_CONF0_RESTORE_MASK; value &= ~BYT_CONF0_RESTORE_MASK;
value |= vg->saved_context[i].conf0; value |= vg->context.pads[i].conf0;
writel(value, reg); writel(value, reg);
dev_info(dev, "restored pin %d conf0 %#08x", i, value); dev_info(dev, "restored pin %d conf0 %#08x", i, value);
} }
...@@ -1722,11 +1710,11 @@ static int byt_gpio_resume(struct device *dev) ...@@ -1722,11 +1710,11 @@ static int byt_gpio_resume(struct device *dev)
reg = byt_gpio_reg(vg, pin, BYT_VAL_REG); reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
value = readl(reg); value = readl(reg);
if ((value & BYT_VAL_RESTORE_MASK) != if ((value & BYT_VAL_RESTORE_MASK) !=
vg->saved_context[i].val) { vg->context.pads[i].val) {
u32 v; u32 v;
v = value & ~BYT_VAL_RESTORE_MASK; v = value & ~BYT_VAL_RESTORE_MASK;
v |= vg->saved_context[i].val; v |= vg->context.pads[i].val;
if (v != value) { if (v != value) {
writel(v, reg); writel(v, reg);
dev_dbg(dev, "restored pin %d val %#08x\n", dev_dbg(dev, "restored pin %d val %#08x\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment