mirror of
https://github.com/Qortal/Brooklyn.git
synced 2025-01-30 14:52:17 +00:00
mempow updates
This commit is contained in:
parent
b0718bde57
commit
2a4295d32d
@ -45,6 +45,10 @@ config PINCTRL_ORION
|
||||
bool
|
||||
select PINCTRL_MVEBU
|
||||
|
||||
config PINCTRL_AC5
|
||||
bool
|
||||
select PINCTRL_MVEBU
|
||||
|
||||
config PINCTRL_ARMADA_37XX
|
||||
bool
|
||||
select GENERIC_PINCONF
|
||||
|
@ -11,3 +11,4 @@ obj-$(CONFIG_PINCTRL_ARMADA_CP110) += pinctrl-armada-cp110.o
|
||||
obj-$(CONFIG_PINCTRL_ARMADA_XP) += pinctrl-armada-xp.o
|
||||
obj-$(CONFIG_PINCTRL_ARMADA_37XX) += pinctrl-armada-37xx.o
|
||||
obj-$(CONFIG_PINCTRL_ORION) += pinctrl-orion.o
|
||||
obj-$(CONFIG_PINCTRL_AC5) += pinctrl-ac5.o
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/pinctrl/pinmux.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/string_helpers.h>
|
||||
@ -101,7 +102,7 @@ struct armada_37xx_pinctrl {
|
||||
struct device *dev;
|
||||
struct gpio_chip gpio_chip;
|
||||
struct irq_chip irq_chip;
|
||||
spinlock_t irq_lock;
|
||||
raw_spinlock_t irq_lock;
|
||||
struct pinctrl_desc pctl;
|
||||
struct pinctrl_dev *pctl_dev;
|
||||
struct armada_37xx_pin_group *groups;
|
||||
@ -522,9 +523,9 @@ static void armada_37xx_irq_ack(struct irq_data *d)
|
||||
unsigned long flags;
|
||||
|
||||
armada_37xx_irq_update_reg(®, d);
|
||||
spin_lock_irqsave(&info->irq_lock, flags);
|
||||
raw_spin_lock_irqsave(&info->irq_lock, flags);
|
||||
writel(d->mask, info->base + reg);
|
||||
spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
}
|
||||
|
||||
static void armada_37xx_irq_mask(struct irq_data *d)
|
||||
@ -535,10 +536,10 @@ static void armada_37xx_irq_mask(struct irq_data *d)
|
||||
unsigned long flags;
|
||||
|
||||
armada_37xx_irq_update_reg(®, d);
|
||||
spin_lock_irqsave(&info->irq_lock, flags);
|
||||
raw_spin_lock_irqsave(&info->irq_lock, flags);
|
||||
val = readl(info->base + reg);
|
||||
writel(val & ~d->mask, info->base + reg);
|
||||
spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
}
|
||||
|
||||
static void armada_37xx_irq_unmask(struct irq_data *d)
|
||||
@ -549,10 +550,10 @@ static void armada_37xx_irq_unmask(struct irq_data *d)
|
||||
unsigned long flags;
|
||||
|
||||
armada_37xx_irq_update_reg(®, d);
|
||||
spin_lock_irqsave(&info->irq_lock, flags);
|
||||
raw_spin_lock_irqsave(&info->irq_lock, flags);
|
||||
val = readl(info->base + reg);
|
||||
writel(val | d->mask, info->base + reg);
|
||||
spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
}
|
||||
|
||||
static int armada_37xx_irq_set_wake(struct irq_data *d, unsigned int on)
|
||||
@ -563,14 +564,14 @@ static int armada_37xx_irq_set_wake(struct irq_data *d, unsigned int on)
|
||||
unsigned long flags;
|
||||
|
||||
armada_37xx_irq_update_reg(®, d);
|
||||
spin_lock_irqsave(&info->irq_lock, flags);
|
||||
raw_spin_lock_irqsave(&info->irq_lock, flags);
|
||||
val = readl(info->base + reg);
|
||||
if (on)
|
||||
val |= (BIT(d->hwirq % GPIO_PER_REG));
|
||||
else
|
||||
val &= ~(BIT(d->hwirq % GPIO_PER_REG));
|
||||
writel(val, info->base + reg);
|
||||
spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -582,7 +583,7 @@ static int armada_37xx_irq_set_type(struct irq_data *d, unsigned int type)
|
||||
u32 val, reg = IRQ_POL;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&info->irq_lock, flags);
|
||||
raw_spin_lock_irqsave(&info->irq_lock, flags);
|
||||
armada_37xx_irq_update_reg(®, d);
|
||||
val = readl(info->base + reg);
|
||||
switch (type) {
|
||||
@ -606,11 +607,11 @@ static int armada_37xx_irq_set_type(struct irq_data *d, unsigned int type)
|
||||
break;
|
||||
}
|
||||
default:
|
||||
spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
return -EINVAL;
|
||||
}
|
||||
writel(val, info->base + reg);
|
||||
spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -625,7 +626,7 @@ static int armada_37xx_edge_both_irq_swap_pol(struct armada_37xx_pinctrl *info,
|
||||
|
||||
regmap_read(info->regmap, INPUT_VAL + 4*reg_idx, &l);
|
||||
|
||||
spin_lock_irqsave(&info->irq_lock, flags);
|
||||
raw_spin_lock_irqsave(&info->irq_lock, flags);
|
||||
p = readl(info->base + IRQ_POL + 4 * reg_idx);
|
||||
if ((p ^ l) & (1 << bit_num)) {
|
||||
/*
|
||||
@ -646,7 +647,7 @@ static int armada_37xx_edge_both_irq_swap_pol(struct armada_37xx_pinctrl *info,
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -663,11 +664,11 @@ static void armada_37xx_irq_handler(struct irq_desc *desc)
|
||||
u32 status;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&info->irq_lock, flags);
|
||||
raw_spin_lock_irqsave(&info->irq_lock, flags);
|
||||
status = readl_relaxed(info->base + IRQ_STATUS + 4 * i);
|
||||
/* Manage only the interrupt that was enabled */
|
||||
status &= readl_relaxed(info->base + IRQ_EN + 4 * i);
|
||||
spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
while (status) {
|
||||
u32 hwirq = ffs(status) - 1;
|
||||
u32 virq = irq_find_mapping(d, hwirq +
|
||||
@ -694,12 +695,12 @@ static void armada_37xx_irq_handler(struct irq_desc *desc)
|
||||
|
||||
update_status:
|
||||
/* Update status in case a new IRQ appears */
|
||||
spin_lock_irqsave(&info->irq_lock, flags);
|
||||
raw_spin_lock_irqsave(&info->irq_lock, flags);
|
||||
status = readl_relaxed(info->base +
|
||||
IRQ_STATUS + 4 * i);
|
||||
/* Manage only the interrupt that was enabled */
|
||||
status &= readl_relaxed(info->base + IRQ_EN + 4 * i);
|
||||
spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&info->irq_lock, flags);
|
||||
}
|
||||
}
|
||||
chained_irq_exit(chip, desc);
|
||||
@ -726,23 +727,13 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
|
||||
struct gpio_chip *gc = &info->gpio_chip;
|
||||
struct irq_chip *irqchip = &info->irq_chip;
|
||||
struct gpio_irq_chip *girq = &gc->irq;
|
||||
struct device_node *np = to_of_node(gc->fwnode);
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *np;
|
||||
int ret = -ENODEV, i, nr_irq_parent;
|
||||
unsigned int i, nr_irq_parent;
|
||||
|
||||
/* Check if we have at least one gpio-controller child node */
|
||||
for_each_child_of_node(dev->of_node, np) {
|
||||
if (of_property_read_bool(np, "gpio-controller")) {
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "no gpio-controller child node\n");
|
||||
raw_spin_lock_init(&info->irq_lock);
|
||||
|
||||
nr_irq_parent = of_irq_count(np);
|
||||
spin_lock_init(&info->irq_lock);
|
||||
|
||||
if (!nr_irq_parent) {
|
||||
dev_err(dev, "invalid or no IRQ\n");
|
||||
return 0;
|
||||
@ -773,7 +764,7 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
|
||||
for (i = 0; i < nr_irq_parent; i++) {
|
||||
int irq = irq_of_parse_and_map(np, i);
|
||||
|
||||
if (irq < 0)
|
||||
if (!irq)
|
||||
continue;
|
||||
girq->parents[i] = irq;
|
||||
}
|
||||
@ -787,18 +778,13 @@ static int armada_37xx_gpiochip_register(struct platform_device *pdev,
|
||||
struct armada_37xx_pinctrl *info)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *np;
|
||||
struct fwnode_handle *fwnode;
|
||||
struct gpio_chip *gc;
|
||||
int ret = -ENODEV;
|
||||
int ret;
|
||||
|
||||
for_each_child_of_node(dev->of_node, np) {
|
||||
if (of_find_property(np, "gpio-controller", NULL)) {
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ret)
|
||||
return ret;
|
||||
fwnode = gpiochip_node_get_first(dev);
|
||||
if (!fwnode)
|
||||
return -ENODEV;
|
||||
|
||||
info->gpio_chip = armada_37xx_gpiolib_chip;
|
||||
|
||||
@ -806,7 +792,7 @@ static int armada_37xx_gpiochip_register(struct platform_device *pdev,
|
||||
gc->ngpio = info->data->nr_pins;
|
||||
gc->parent = dev;
|
||||
gc->base = -1;
|
||||
gc->of_node = np;
|
||||
gc->fwnode = fwnode;
|
||||
gc->label = info->data->name;
|
||||
|
||||
ret = armada_37xx_irqchip_register(pdev, info);
|
||||
@ -1121,25 +1107,40 @@ static const struct of_device_id armada_37xx_pinctrl_of_match[] = {
|
||||
{ },
|
||||
};
|
||||
|
||||
static const struct regmap_config armada_37xx_pinctrl_regmap_config = {
|
||||
.reg_bits = 32,
|
||||
.val_bits = 32,
|
||||
.reg_stride = 4,
|
||||
.use_raw_spinlock = true,
|
||||
};
|
||||
|
||||
static int __init armada_37xx_pinctrl_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct armada_37xx_pinctrl *info;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *np = dev->of_node;
|
||||
struct regmap *regmap;
|
||||
void __iomem *base;
|
||||
int ret;
|
||||
|
||||
base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
|
||||
if (IS_ERR(base)) {
|
||||
dev_err(dev, "failed to ioremap base address: %pe\n", base);
|
||||
return PTR_ERR(base);
|
||||
}
|
||||
|
||||
regmap = devm_regmap_init_mmio(dev, base,
|
||||
&armada_37xx_pinctrl_regmap_config);
|
||||
if (IS_ERR(regmap)) {
|
||||
dev_err(dev, "failed to create regmap: %pe\n", regmap);
|
||||
return PTR_ERR(regmap);
|
||||
}
|
||||
|
||||
info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
|
||||
if (!info)
|
||||
return -ENOMEM;
|
||||
|
||||
info->dev = dev;
|
||||
|
||||
regmap = syscon_node_to_regmap(np);
|
||||
if (IS_ERR(regmap))
|
||||
return dev_err_probe(dev, PTR_ERR(regmap), "cannot get regmap\n");
|
||||
info->regmap = regmap;
|
||||
|
||||
info->data = of_device_get_match_data(dev);
|
||||
|
||||
ret = armada_37xx_pinctrl_register(pdev, info);
|
||||
|
@ -96,10 +96,12 @@ static struct mvebu_pinctrl_group *mvebu_pinctrl_find_group_by_name(
|
||||
struct mvebu_pinctrl *pctl, const char *name)
|
||||
{
|
||||
unsigned n;
|
||||
|
||||
for (n = 0; n < pctl->num_groups; n++) {
|
||||
if (strcmp(name, pctl->groups[n].name) == 0)
|
||||
return &pctl->groups[n];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -108,6 +110,7 @@ static struct mvebu_mpp_ctrl_setting *mvebu_pinctrl_find_setting_by_val(
|
||||
unsigned long config)
|
||||
{
|
||||
unsigned n;
|
||||
|
||||
for (n = 0; n < grp->num_settings; n++) {
|
||||
if (config == grp->settings[n].val) {
|
||||
if (!pctl->variant || (pctl->variant &
|
||||
@ -115,6 +118,7 @@ static struct mvebu_mpp_ctrl_setting *mvebu_pinctrl_find_setting_by_val(
|
||||
return &grp->settings[n];
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -123,6 +127,7 @@ static struct mvebu_mpp_ctrl_setting *mvebu_pinctrl_find_setting_by_name(
|
||||
const char *name)
|
||||
{
|
||||
unsigned n;
|
||||
|
||||
for (n = 0; n < grp->num_settings; n++) {
|
||||
if (strcmp(name, grp->settings[n].name) == 0) {
|
||||
if (!pctl->variant || (pctl->variant &
|
||||
@ -130,6 +135,7 @@ static struct mvebu_mpp_ctrl_setting *mvebu_pinctrl_find_setting_by_name(
|
||||
return &grp->settings[n];
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -137,6 +143,7 @@ static struct mvebu_mpp_ctrl_setting *mvebu_pinctrl_find_gpio_setting(
|
||||
struct mvebu_pinctrl *pctl, struct mvebu_pinctrl_group *grp)
|
||||
{
|
||||
unsigned n;
|
||||
|
||||
for (n = 0; n < grp->num_settings; n++) {
|
||||
if (grp->settings[n].flags &
|
||||
(MVEBU_SETTING_GPO | MVEBU_SETTING_GPI)) {
|
||||
@ -145,6 +152,7 @@ static struct mvebu_mpp_ctrl_setting *mvebu_pinctrl_find_gpio_setting(
|
||||
return &grp->settings[n];
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -152,10 +160,12 @@ static struct mvebu_pinctrl_function *mvebu_pinctrl_find_function_by_name(
|
||||
struct mvebu_pinctrl *pctl, const char *name)
|
||||
{
|
||||
unsigned n;
|
||||
|
||||
for (n = 0; n < pctl->num_functions; n++) {
|
||||
if (strcmp(name, pctl->functions[n].name) == 0)
|
||||
return &pctl->functions[n];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -440,6 +440,10 @@ static const unsigned mc2_a_1_pins[] = { DB8500_PIN_A5, DB8500_PIN_B4,
|
||||
DB8500_PIN_C8, DB8500_PIN_A12, DB8500_PIN_C10, DB8500_PIN_B10,
|
||||
DB8500_PIN_B9, DB8500_PIN_A9, DB8500_PIN_C7, DB8500_PIN_A7,
|
||||
DB8500_PIN_C5 };
|
||||
/* MC2 without the feedback clock */
|
||||
static const unsigned mc2_a_2_pins[] = { DB8500_PIN_A5, DB8500_PIN_B4,
|
||||
DB8500_PIN_A12, DB8500_PIN_C10, DB8500_PIN_B10, DB8500_PIN_B9,
|
||||
DB8500_PIN_A9, DB8500_PIN_C7, DB8500_PIN_A7, DB8500_PIN_C5 };
|
||||
static const unsigned ssp1_a_1_pins[] = { DB8500_PIN_C9, DB8500_PIN_B11,
|
||||
DB8500_PIN_C12, DB8500_PIN_C11 };
|
||||
static const unsigned ssp0_a_1_pins[] = { DB8500_PIN_D12, DB8500_PIN_B13,
|
||||
@ -699,6 +703,7 @@ static const struct nmk_pingroup nmk_db8500_groups[] = {
|
||||
DB8500_PIN_GROUP(kp_a_1, NMK_GPIO_ALT_A),
|
||||
DB8500_PIN_GROUP(kpskaskb_a_1, NMK_GPIO_ALT_A),
|
||||
DB8500_PIN_GROUP(mc2_a_1, NMK_GPIO_ALT_A),
|
||||
DB8500_PIN_GROUP(mc2_a_2, NMK_GPIO_ALT_A),
|
||||
DB8500_PIN_GROUP(ssp1_a_1, NMK_GPIO_ALT_A),
|
||||
DB8500_PIN_GROUP(ssp0_a_1, NMK_GPIO_ALT_A),
|
||||
DB8500_PIN_GROUP(i2c0_a_1, NMK_GPIO_ALT_A),
|
||||
@ -856,7 +861,7 @@ DB8500_FUNC_GROUPS(lcd, "lcdvsi0_a_1", "lcdvsi1_a_1", "lcd_d0_d7_a_1",
|
||||
"lcd_d8_d11_a_1", "lcd_d12_d15_a_1", "lcd_d12_d23_a_1", "lcd_b_1",
|
||||
"lcd_d16_d23_b_1");
|
||||
DB8500_FUNC_GROUPS(kp, "kp_a_1", "kp_a_2", "kp_b_1", "kp_b_2", "kp_c_1", "kp_oc1_1");
|
||||
DB8500_FUNC_GROUPS(mc2, "mc2_a_1", "mc2rstn_c_1");
|
||||
DB8500_FUNC_GROUPS(mc2, "mc2_a_1", "mc2_a_2", "mc2rstn_c_1");
|
||||
DB8500_FUNC_GROUPS(ssp1, "ssp1_a_1");
|
||||
DB8500_FUNC_GROUPS(ssp0, "ssp0_a_1");
|
||||
DB8500_FUNC_GROUPS(i2c0, "i2c0_a_1");
|
||||
|
@ -1113,6 +1113,7 @@ static int nmk_gpio_probe(struct platform_device *dev)
|
||||
spin_lock_init(&nmk_chip->lock);
|
||||
|
||||
chip = &nmk_chip->chip;
|
||||
chip->parent = &dev->dev;
|
||||
chip->request = gpiochip_generic_request;
|
||||
chip->free = gpiochip_generic_free;
|
||||
chip->get_direction = nmk_gpio_get_dir;
|
||||
@ -1154,7 +1155,6 @@ static int nmk_gpio_probe(struct platform_device *dev)
|
||||
clk_enable(nmk_chip->clk);
|
||||
nmk_chip->lowemi = readl_relaxed(nmk_chip->addr + NMK_GPIO_LOWEMI);
|
||||
clk_disable(nmk_chip->clk);
|
||||
chip->of_node = np;
|
||||
|
||||
ret = gpiochip_add_data(chip, nmk_chip);
|
||||
if (ret)
|
||||
@ -1421,8 +1421,10 @@ static int nmk_pinctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
|
||||
|
||||
has_config = nmk_pinctrl_dt_get_config(np, &configs);
|
||||
np_config = of_parse_phandle(np, "ste,config", 0);
|
||||
if (np_config)
|
||||
if (np_config) {
|
||||
has_config |= nmk_pinctrl_dt_get_config(np_config, &configs);
|
||||
of_node_put(np_config);
|
||||
}
|
||||
if (has_config) {
|
||||
const char *gpio_name;
|
||||
const char *pin;
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/pinctrl/pinmux.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/regmap.h>
|
||||
|
||||
/* GCR registers */
|
||||
@ -104,12 +105,12 @@ static void npcm_gpio_set(struct gpio_chip *gc, void __iomem *reg,
|
||||
unsigned long flags;
|
||||
unsigned long val;
|
||||
|
||||
spin_lock_irqsave(&gc->bgpio_lock, flags);
|
||||
raw_spin_lock_irqsave(&gc->bgpio_lock, flags);
|
||||
|
||||
val = ioread32(reg) | pinmask;
|
||||
iowrite32(val, reg);
|
||||
|
||||
spin_unlock_irqrestore(&gc->bgpio_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags);
|
||||
}
|
||||
|
||||
static void npcm_gpio_clr(struct gpio_chip *gc, void __iomem *reg,
|
||||
@ -118,12 +119,12 @@ static void npcm_gpio_clr(struct gpio_chip *gc, void __iomem *reg,
|
||||
unsigned long flags;
|
||||
unsigned long val;
|
||||
|
||||
spin_lock_irqsave(&gc->bgpio_lock, flags);
|
||||
raw_spin_lock_irqsave(&gc->bgpio_lock, flags);
|
||||
|
||||
val = ioread32(reg) & ~pinmask;
|
||||
iowrite32(val, reg);
|
||||
|
||||
spin_unlock_irqrestore(&gc->bgpio_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags);
|
||||
}
|
||||
|
||||
static void npcmgpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
|
||||
@ -1862,88 +1863,69 @@ static int npcm7xx_gpio_of(struct npcm7xx_pinctrl *pctrl)
|
||||
{
|
||||
int ret = -ENXIO;
|
||||
struct resource res;
|
||||
int id = 0, irq;
|
||||
struct device_node *np;
|
||||
struct of_phandle_args pinspec;
|
||||
struct device *dev = pctrl->dev;
|
||||
struct fwnode_reference_args args;
|
||||
struct fwnode_handle *child;
|
||||
int id = 0;
|
||||
|
||||
for_each_available_child_of_node(pctrl->dev->of_node, np)
|
||||
if (of_find_property(np, "gpio-controller", NULL)) {
|
||||
ret = of_address_to_resource(np, 0, &res);
|
||||
if (ret < 0) {
|
||||
dev_err(pctrl->dev,
|
||||
"Resource fail for GPIO bank %u\n", id);
|
||||
return ret;
|
||||
}
|
||||
for_each_gpiochip_node(dev, child) {
|
||||
struct device_node *np = to_of_node(child);
|
||||
|
||||
pctrl->gpio_bank[id].base =
|
||||
ioremap(res.start, resource_size(&res));
|
||||
|
||||
irq = irq_of_parse_and_map(np, 0);
|
||||
if (irq < 0) {
|
||||
dev_err(pctrl->dev,
|
||||
"No IRQ for GPIO bank %u\n", id);
|
||||
ret = irq;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = bgpio_init(&pctrl->gpio_bank[id].gc,
|
||||
pctrl->dev, 4,
|
||||
pctrl->gpio_bank[id].base +
|
||||
NPCM7XX_GP_N_DIN,
|
||||
pctrl->gpio_bank[id].base +
|
||||
NPCM7XX_GP_N_DOUT,
|
||||
NULL,
|
||||
NULL,
|
||||
pctrl->gpio_bank[id].base +
|
||||
NPCM7XX_GP_N_IEM,
|
||||
BGPIOF_READ_OUTPUT_REG_SET);
|
||||
if (ret) {
|
||||
dev_err(pctrl->dev, "bgpio_init() failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = of_parse_phandle_with_fixed_args(np,
|
||||
"gpio-ranges", 3,
|
||||
0, &pinspec);
|
||||
if (ret < 0) {
|
||||
dev_err(pctrl->dev,
|
||||
"gpio-ranges fail for GPIO bank %u\n",
|
||||
id);
|
||||
return ret;
|
||||
}
|
||||
|
||||
pctrl->gpio_bank[id].irq = irq;
|
||||
pctrl->gpio_bank[id].irq_chip = npcmgpio_irqchip;
|
||||
pctrl->gpio_bank[id].gc.parent = pctrl->dev;
|
||||
pctrl->gpio_bank[id].irqbase =
|
||||
id * NPCM7XX_GPIO_PER_BANK;
|
||||
pctrl->gpio_bank[id].pinctrl_id = pinspec.args[0];
|
||||
pctrl->gpio_bank[id].gc.base = pinspec.args[1];
|
||||
pctrl->gpio_bank[id].gc.ngpio = pinspec.args[2];
|
||||
pctrl->gpio_bank[id].gc.owner = THIS_MODULE;
|
||||
pctrl->gpio_bank[id].gc.label =
|
||||
devm_kasprintf(pctrl->dev, GFP_KERNEL, "%pOF",
|
||||
np);
|
||||
if (pctrl->gpio_bank[id].gc.label == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
pctrl->gpio_bank[id].gc.dbg_show = npcmgpio_dbg_show;
|
||||
pctrl->gpio_bank[id].direction_input =
|
||||
pctrl->gpio_bank[id].gc.direction_input;
|
||||
pctrl->gpio_bank[id].gc.direction_input =
|
||||
npcmgpio_direction_input;
|
||||
pctrl->gpio_bank[id].direction_output =
|
||||
pctrl->gpio_bank[id].gc.direction_output;
|
||||
pctrl->gpio_bank[id].gc.direction_output =
|
||||
npcmgpio_direction_output;
|
||||
pctrl->gpio_bank[id].request =
|
||||
pctrl->gpio_bank[id].gc.request;
|
||||
pctrl->gpio_bank[id].gc.request = npcmgpio_gpio_request;
|
||||
pctrl->gpio_bank[id].gc.free = npcmgpio_gpio_free;
|
||||
pctrl->gpio_bank[id].gc.of_node = np;
|
||||
id++;
|
||||
ret = of_address_to_resource(np, 0, &res);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "Resource fail for GPIO bank %u\n", id);
|
||||
return ret;
|
||||
}
|
||||
|
||||
pctrl->gpio_bank[id].base = ioremap(res.start, resource_size(&res));
|
||||
|
||||
ret = bgpio_init(&pctrl->gpio_bank[id].gc, dev, 4,
|
||||
pctrl->gpio_bank[id].base + NPCM7XX_GP_N_DIN,
|
||||
pctrl->gpio_bank[id].base + NPCM7XX_GP_N_DOUT,
|
||||
NULL,
|
||||
NULL,
|
||||
pctrl->gpio_bank[id].base + NPCM7XX_GP_N_IEM,
|
||||
BGPIOF_READ_OUTPUT_REG_SET);
|
||||
if (ret) {
|
||||
dev_err(dev, "bgpio_init() failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = fwnode_property_get_reference_args(child, "gpio-ranges", NULL, 3, 0, &args);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "gpio-ranges fail for GPIO bank %u\n", id);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = irq_of_parse_and_map(np, 0);
|
||||
if (!ret) {
|
||||
dev_err(dev, "No IRQ for GPIO bank %u\n", id);
|
||||
return -EINVAL;
|
||||
}
|
||||
pctrl->gpio_bank[id].irq = ret;
|
||||
pctrl->gpio_bank[id].irq_chip = npcmgpio_irqchip;
|
||||
pctrl->gpio_bank[id].irqbase = id * NPCM7XX_GPIO_PER_BANK;
|
||||
pctrl->gpio_bank[id].pinctrl_id = args.args[0];
|
||||
pctrl->gpio_bank[id].gc.base = args.args[1];
|
||||
pctrl->gpio_bank[id].gc.ngpio = args.args[2];
|
||||
pctrl->gpio_bank[id].gc.owner = THIS_MODULE;
|
||||
pctrl->gpio_bank[id].gc.parent = dev;
|
||||
pctrl->gpio_bank[id].gc.fwnode = child;
|
||||
pctrl->gpio_bank[id].gc.label = devm_kasprintf(dev, GFP_KERNEL, "%pfw", child);
|
||||
if (pctrl->gpio_bank[id].gc.label == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
pctrl->gpio_bank[id].gc.dbg_show = npcmgpio_dbg_show;
|
||||
pctrl->gpio_bank[id].direction_input = pctrl->gpio_bank[id].gc.direction_input;
|
||||
pctrl->gpio_bank[id].gc.direction_input = npcmgpio_direction_input;
|
||||
pctrl->gpio_bank[id].direction_output = pctrl->gpio_bank[id].gc.direction_output;
|
||||
pctrl->gpio_bank[id].gc.direction_output = npcmgpio_direction_output;
|
||||
pctrl->gpio_bank[id].request = pctrl->gpio_bank[id].gc.request;
|
||||
pctrl->gpio_bank[id].gc.request = npcmgpio_gpio_request;
|
||||
pctrl->gpio_bank[id].gc.free = npcmgpio_gpio_free;
|
||||
id++;
|
||||
}
|
||||
|
||||
pctrl->bank_num = id;
|
||||
return ret;
|
||||
}
|
||||
|
@ -113,6 +113,14 @@ config PINCTRL_MSM8X74
|
||||
This is the pinctrl, pinmux, pinconf and gpiolib driver for the
|
||||
Qualcomm TLMM block found in the Qualcomm 8974 platform.
|
||||
|
||||
config PINCTRL_MSM8909
|
||||
tristate "Qualcomm 8909 pin controller driver"
|
||||
depends on OF
|
||||
depends on PINCTRL_MSM
|
||||
help
|
||||
This is the pinctrl, pinmux, pinconf and gpiolib driver for the
|
||||
Qualcomm TLMM block found on the Qualcomm MSM8909 platform.
|
||||
|
||||
config PINCTRL_MSM8916
|
||||
tristate "Qualcomm 8916 pin controller driver"
|
||||
depends on OF
|
||||
@ -239,6 +247,15 @@ config PINCTRL_SC7280
|
||||
Qualcomm Technologies Inc TLMM block found on the Qualcomm
|
||||
Technologies Inc SC7280 platform.
|
||||
|
||||
config PINCTRL_SC7280_LPASS_LPI
|
||||
tristate "Qualcomm Technologies Inc SC7280 LPASS LPI pin controller driver"
|
||||
depends on GPIOLIB
|
||||
depends on PINCTRL_LPASS_LPI
|
||||
help
|
||||
This is the pinctrl, pinmux, pinconf and gpiolib driver for the
|
||||
Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI
|
||||
(Low Power Island) found on the Qualcomm Technologies Inc SC7280 platform.
|
||||
|
||||
config PINCTRL_SC8180X
|
||||
tristate "Qualcomm Technologies Inc SC8180x pin controller driver"
|
||||
depends on (OF || ACPI)
|
||||
@ -311,6 +328,15 @@ config PINCTRL_SM6350
|
||||
Qualcomm Technologies Inc TLMM block found on the Qualcomm
|
||||
Technologies Inc SM6350 platform.
|
||||
|
||||
config PINCTRL_SM6375
|
||||
tristate "Qualcomm Technologies Inc SM6375 pin controller driver"
|
||||
depends on GPIOLIB && OF
|
||||
depends on PINCTRL_MSM
|
||||
help
|
||||
This is the pinctrl, pinmux, pinconf and gpiolib driver for the
|
||||
Qualcomm Technologies Inc TLMM block found on the Qualcomm
|
||||
Technologies Inc SM6375 platform.
|
||||
|
||||
config PINCTRL_SDX65
|
||||
tristate "Qualcomm Technologies Inc SDX65 pin controller driver"
|
||||
depends on GPIOLIB && OF
|
||||
@ -338,6 +364,15 @@ config PINCTRL_SM8250
|
||||
Qualcomm Technologies Inc TLMM block found on the Qualcomm
|
||||
Technologies Inc SM8250 platform.
|
||||
|
||||
config PINCTRL_SM8250_LPASS_LPI
|
||||
tristate "Qualcomm Technologies Inc SM8250 LPASS LPI pin controller driver"
|
||||
depends on GPIOLIB
|
||||
depends on PINCTRL_LPASS_LPI
|
||||
help
|
||||
This is the pinctrl, pinmux, pinconf and gpiolib driver for the
|
||||
Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI
|
||||
(Low Power Island) found on the Qualcomm Technologies Inc SM8250 platform.
|
||||
|
||||
config PINCTRL_SM8350
|
||||
tristate "Qualcomm Technologies Inc SM8350 pin controller driver"
|
||||
depends on PINCTRL_MSM
|
||||
@ -349,7 +384,7 @@ config PINCTRL_SM8350
|
||||
config PINCTRL_SM8450
|
||||
tristate "Qualcomm Technologies Inc SM8450 pin controller driver"
|
||||
depends on GPIOLIB && OF
|
||||
select PINCTRL_MSM
|
||||
depends on PINCTRL_MSM
|
||||
help
|
||||
This is the pinctrl, pinmux, pinconf and gpiolib driver for the
|
||||
Qualcomm Technologies Inc TLMM block found on the Qualcomm
|
||||
@ -360,6 +395,7 @@ config PINCTRL_LPASS_LPI
|
||||
select PINMUX
|
||||
select PINCONF
|
||||
select GENERIC_PINCONF
|
||||
select GENERIC_PINCTRL_GROUPS
|
||||
depends on GPIOLIB
|
||||
help
|
||||
This is the pinctrl, pinmux, pinconf and gpiolib driver for the
|
||||
|
@ -11,6 +11,7 @@ obj-$(CONFIG_PINCTRL_MSM8226) += pinctrl-msm8226.o
|
||||
obj-$(CONFIG_PINCTRL_MSM8660) += pinctrl-msm8660.o
|
||||
obj-$(CONFIG_PINCTRL_MSM8960) += pinctrl-msm8960.o
|
||||
obj-$(CONFIG_PINCTRL_MSM8X74) += pinctrl-msm8x74.o
|
||||
obj-$(CONFIG_PINCTRL_MSM8909) += pinctrl-msm8909.o
|
||||
obj-$(CONFIG_PINCTRL_MSM8916) += pinctrl-msm8916.o
|
||||
obj-$(CONFIG_PINCTRL_MSM8953) += pinctrl-msm8953.o
|
||||
obj-$(CONFIG_PINCTRL_MSM8976) += pinctrl-msm8976.o
|
||||
@ -28,6 +29,7 @@ obj-$(CONFIG_PINCTRL_QCOM_SSBI_PMIC) += pinctrl-ssbi-gpio.o
|
||||
obj-$(CONFIG_PINCTRL_QCOM_SSBI_PMIC) += pinctrl-ssbi-mpp.o
|
||||
obj-$(CONFIG_PINCTRL_SC7180) += pinctrl-sc7180.o
|
||||
obj-$(CONFIG_PINCTRL_SC7280) += pinctrl-sc7280.o
|
||||
obj-$(CONFIG_PINCTRL_SC7280_LPASS_LPI) += pinctrl-sc7280-lpass-lpi.o
|
||||
obj-$(CONFIG_PINCTRL_SC8180X) += pinctrl-sc8180x.o
|
||||
obj-$(CONFIG_PINCTRL_SC8280XP) += pinctrl-sc8280xp.o
|
||||
obj-$(CONFIG_PINCTRL_SDM660) += pinctrl-sdm660.o
|
||||
@ -36,9 +38,11 @@ obj-$(CONFIG_PINCTRL_SDX55) += pinctrl-sdx55.o
|
||||
obj-$(CONFIG_PINCTRL_SM6115) += pinctrl-sm6115.o
|
||||
obj-$(CONFIG_PINCTRL_SM6125) += pinctrl-sm6125.o
|
||||
obj-$(CONFIG_PINCTRL_SM6350) += pinctrl-sm6350.o
|
||||
obj-$(CONFIG_PINCTRL_SM6375) += pinctrl-sm6375.o
|
||||
obj-$(CONFIG_PINCTRL_SDX65) += pinctrl-sdx65.o
|
||||
obj-$(CONFIG_PINCTRL_SM8150) += pinctrl-sm8150.o
|
||||
obj-$(CONFIG_PINCTRL_SM8250) += pinctrl-sm8250.o
|
||||
obj-$(CONFIG_PINCTRL_SM8250_LPASS_LPI) += pinctrl-sm8250-lpass-lpi.o
|
||||
obj-$(CONFIG_PINCTRL_SM8350) += pinctrl-sm8350.o
|
||||
obj-$(CONFIG_PINCTRL_SM8450) += pinctrl-sm8450.o
|
||||
obj-$(CONFIG_PINCTRL_LPASS_LPI) += pinctrl-lpass-lpi.o
|
||||
|
@ -4,93 +4,15 @@
|
||||
* Copyright (c) 2020 Linaro Ltd.
|
||||
*/
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/pinctrl/pinconf-generic.h>
|
||||
#include <linux/pinctrl/pinconf.h>
|
||||
#include <linux/pinctrl/pinmux.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/types.h>
|
||||
#include "../core.h"
|
||||
#include "../pinctrl-utils.h"
|
||||
|
||||
#define LPI_SLEW_RATE_CTL_REG 0xa000
|
||||
#define LPI_TLMM_REG_OFFSET 0x1000
|
||||
#define LPI_SLEW_RATE_MAX 0x03
|
||||
#define LPI_SLEW_BITS_SIZE 0x02
|
||||
#define LPI_SLEW_RATE_MASK GENMASK(1, 0)
|
||||
#define LPI_GPIO_CFG_REG 0x00
|
||||
#define LPI_GPIO_PULL_MASK GENMASK(1, 0)
|
||||
#define LPI_GPIO_FUNCTION_MASK GENMASK(5, 2)
|
||||
#define LPI_GPIO_OUT_STRENGTH_MASK GENMASK(8, 6)
|
||||
#define LPI_GPIO_OE_MASK BIT(9)
|
||||
#define LPI_GPIO_VALUE_REG 0x04
|
||||
#define LPI_GPIO_VALUE_IN_MASK BIT(0)
|
||||
#define LPI_GPIO_VALUE_OUT_MASK BIT(1)
|
||||
|
||||
#define LPI_GPIO_BIAS_DISABLE 0x0
|
||||
#define LPI_GPIO_PULL_DOWN 0x1
|
||||
#define LPI_GPIO_KEEPER 0x2
|
||||
#define LPI_GPIO_PULL_UP 0x3
|
||||
#define LPI_GPIO_DS_TO_VAL(v) (v / 2 - 1)
|
||||
#define NO_SLEW -1
|
||||
|
||||
#define LPI_FUNCTION(fname) \
|
||||
[LPI_MUX_##fname] = { \
|
||||
.name = #fname, \
|
||||
.groups = fname##_groups, \
|
||||
.ngroups = ARRAY_SIZE(fname##_groups), \
|
||||
}
|
||||
|
||||
#define LPI_PINGROUP(id, soff, f1, f2, f3, f4) \
|
||||
{ \
|
||||
.name = "gpio" #id, \
|
||||
.pins = gpio##id##_pins, \
|
||||
.pin = id, \
|
||||
.slew_offset = soff, \
|
||||
.npins = ARRAY_SIZE(gpio##id##_pins), \
|
||||
.funcs = (int[]){ \
|
||||
LPI_MUX_gpio, \
|
||||
LPI_MUX_##f1, \
|
||||
LPI_MUX_##f2, \
|
||||
LPI_MUX_##f3, \
|
||||
LPI_MUX_##f4, \
|
||||
}, \
|
||||
.nfuncs = 5, \
|
||||
}
|
||||
|
||||
struct lpi_pingroup {
|
||||
const char *name;
|
||||
const unsigned int *pins;
|
||||
unsigned int npins;
|
||||
unsigned int pin;
|
||||
/* Bit offset in slew register for SoundWire pins only */
|
||||
int slew_offset;
|
||||
unsigned int *funcs;
|
||||
unsigned int nfuncs;
|
||||
};
|
||||
|
||||
struct lpi_function {
|
||||
const char *name;
|
||||
const char * const *groups;
|
||||
unsigned int ngroups;
|
||||
};
|
||||
|
||||
struct lpi_pinctrl_variant_data {
|
||||
const struct pinctrl_pin_desc *pins;
|
||||
int npins;
|
||||
const struct lpi_pingroup *groups;
|
||||
int ngroups;
|
||||
const struct lpi_function *functions;
|
||||
int nfunctions;
|
||||
};
|
||||
#include "pinctrl-lpass-lpi.h"
|
||||
|
||||
#define MAX_LPI_NUM_CLKS 2
|
||||
|
||||
@ -106,136 +28,6 @@ struct lpi_pinctrl {
|
||||
const struct lpi_pinctrl_variant_data *data;
|
||||
};
|
||||
|
||||
/* sm8250 variant specific data */
|
||||
static const struct pinctrl_pin_desc sm8250_lpi_pins[] = {
|
||||
PINCTRL_PIN(0, "gpio0"),
|
||||
PINCTRL_PIN(1, "gpio1"),
|
||||
PINCTRL_PIN(2, "gpio2"),
|
||||
PINCTRL_PIN(3, "gpio3"),
|
||||
PINCTRL_PIN(4, "gpio4"),
|
||||
PINCTRL_PIN(5, "gpio5"),
|
||||
PINCTRL_PIN(6, "gpio6"),
|
||||
PINCTRL_PIN(7, "gpio7"),
|
||||
PINCTRL_PIN(8, "gpio8"),
|
||||
PINCTRL_PIN(9, "gpio9"),
|
||||
PINCTRL_PIN(10, "gpio10"),
|
||||
PINCTRL_PIN(11, "gpio11"),
|
||||
PINCTRL_PIN(12, "gpio12"),
|
||||
PINCTRL_PIN(13, "gpio13"),
|
||||
};
|
||||
|
||||
enum sm8250_lpi_functions {
|
||||
LPI_MUX_dmic1_clk,
|
||||
LPI_MUX_dmic1_data,
|
||||
LPI_MUX_dmic2_clk,
|
||||
LPI_MUX_dmic2_data,
|
||||
LPI_MUX_dmic3_clk,
|
||||
LPI_MUX_dmic3_data,
|
||||
LPI_MUX_i2s1_clk,
|
||||
LPI_MUX_i2s1_data,
|
||||
LPI_MUX_i2s1_ws,
|
||||
LPI_MUX_i2s2_clk,
|
||||
LPI_MUX_i2s2_data,
|
||||
LPI_MUX_i2s2_ws,
|
||||
LPI_MUX_qua_mi2s_data,
|
||||
LPI_MUX_qua_mi2s_sclk,
|
||||
LPI_MUX_qua_mi2s_ws,
|
||||
LPI_MUX_swr_rx_clk,
|
||||
LPI_MUX_swr_rx_data,
|
||||
LPI_MUX_swr_tx_clk,
|
||||
LPI_MUX_swr_tx_data,
|
||||
LPI_MUX_wsa_swr_clk,
|
||||
LPI_MUX_wsa_swr_data,
|
||||
LPI_MUX_gpio,
|
||||
LPI_MUX__,
|
||||
};
|
||||
|
||||
static const unsigned int gpio0_pins[] = { 0 };
|
||||
static const unsigned int gpio1_pins[] = { 1 };
|
||||
static const unsigned int gpio2_pins[] = { 2 };
|
||||
static const unsigned int gpio3_pins[] = { 3 };
|
||||
static const unsigned int gpio4_pins[] = { 4 };
|
||||
static const unsigned int gpio5_pins[] = { 5 };
|
||||
static const unsigned int gpio6_pins[] = { 6 };
|
||||
static const unsigned int gpio7_pins[] = { 7 };
|
||||
static const unsigned int gpio8_pins[] = { 8 };
|
||||
static const unsigned int gpio9_pins[] = { 9 };
|
||||
static const unsigned int gpio10_pins[] = { 10 };
|
||||
static const unsigned int gpio11_pins[] = { 11 };
|
||||
static const unsigned int gpio12_pins[] = { 12 };
|
||||
static const unsigned int gpio13_pins[] = { 13 };
|
||||
static const char * const swr_tx_clk_groups[] = { "gpio0" };
|
||||
static const char * const swr_tx_data_groups[] = { "gpio1", "gpio2", "gpio5" };
|
||||
static const char * const swr_rx_clk_groups[] = { "gpio3" };
|
||||
static const char * const swr_rx_data_groups[] = { "gpio4", "gpio5" };
|
||||
static const char * const dmic1_clk_groups[] = { "gpio6" };
|
||||
static const char * const dmic1_data_groups[] = { "gpio7" };
|
||||
static const char * const dmic2_clk_groups[] = { "gpio8" };
|
||||
static const char * const dmic2_data_groups[] = { "gpio9" };
|
||||
static const char * const i2s2_clk_groups[] = { "gpio10" };
|
||||
static const char * const i2s2_ws_groups[] = { "gpio11" };
|
||||
static const char * const dmic3_clk_groups[] = { "gpio12" };
|
||||
static const char * const dmic3_data_groups[] = { "gpio13" };
|
||||
static const char * const qua_mi2s_sclk_groups[] = { "gpio0" };
|
||||
static const char * const qua_mi2s_ws_groups[] = { "gpio1" };
|
||||
static const char * const qua_mi2s_data_groups[] = { "gpio2", "gpio3", "gpio4" };
|
||||
static const char * const i2s1_clk_groups[] = { "gpio6" };
|
||||
static const char * const i2s1_ws_groups[] = { "gpio7" };
|
||||
static const char * const i2s1_data_groups[] = { "gpio8", "gpio9" };
|
||||
static const char * const wsa_swr_clk_groups[] = { "gpio10" };
|
||||
static const char * const wsa_swr_data_groups[] = { "gpio11" };
|
||||
static const char * const i2s2_data_groups[] = { "gpio12", "gpio12" };
|
||||
|
||||
static const struct lpi_pingroup sm8250_groups[] = {
|
||||
LPI_PINGROUP(0, 0, swr_tx_clk, qua_mi2s_sclk, _, _),
|
||||
LPI_PINGROUP(1, 2, swr_tx_data, qua_mi2s_ws, _, _),
|
||||
LPI_PINGROUP(2, 4, swr_tx_data, qua_mi2s_data, _, _),
|
||||
LPI_PINGROUP(3, 8, swr_rx_clk, qua_mi2s_data, _, _),
|
||||
LPI_PINGROUP(4, 10, swr_rx_data, qua_mi2s_data, _, _),
|
||||
LPI_PINGROUP(5, 12, swr_tx_data, swr_rx_data, _, _),
|
||||
LPI_PINGROUP(6, NO_SLEW, dmic1_clk, i2s1_clk, _, _),
|
||||
LPI_PINGROUP(7, NO_SLEW, dmic1_data, i2s1_ws, _, _),
|
||||
LPI_PINGROUP(8, NO_SLEW, dmic2_clk, i2s1_data, _, _),
|
||||
LPI_PINGROUP(9, NO_SLEW, dmic2_data, i2s1_data, _, _),
|
||||
LPI_PINGROUP(10, 16, i2s2_clk, wsa_swr_clk, _, _),
|
||||
LPI_PINGROUP(11, 18, i2s2_ws, wsa_swr_data, _, _),
|
||||
LPI_PINGROUP(12, NO_SLEW, dmic3_clk, i2s2_data, _, _),
|
||||
LPI_PINGROUP(13, NO_SLEW, dmic3_data, i2s2_data, _, _),
|
||||
};
|
||||
|
||||
static const struct lpi_function sm8250_functions[] = {
|
||||
LPI_FUNCTION(dmic1_clk),
|
||||
LPI_FUNCTION(dmic1_data),
|
||||
LPI_FUNCTION(dmic2_clk),
|
||||
LPI_FUNCTION(dmic2_data),
|
||||
LPI_FUNCTION(dmic3_clk),
|
||||
LPI_FUNCTION(dmic3_data),
|
||||
LPI_FUNCTION(i2s1_clk),
|
||||
LPI_FUNCTION(i2s1_data),
|
||||
LPI_FUNCTION(i2s1_ws),
|
||||
LPI_FUNCTION(i2s2_clk),
|
||||
LPI_FUNCTION(i2s2_data),
|
||||
LPI_FUNCTION(i2s2_ws),
|
||||
LPI_FUNCTION(qua_mi2s_data),
|
||||
LPI_FUNCTION(qua_mi2s_sclk),
|
||||
LPI_FUNCTION(qua_mi2s_ws),
|
||||
LPI_FUNCTION(swr_rx_clk),
|
||||
LPI_FUNCTION(swr_rx_data),
|
||||
LPI_FUNCTION(swr_tx_clk),
|
||||
LPI_FUNCTION(swr_tx_data),
|
||||
LPI_FUNCTION(wsa_swr_clk),
|
||||
LPI_FUNCTION(wsa_swr_data),
|
||||
};
|
||||
|
||||
static struct lpi_pinctrl_variant_data sm8250_lpi_data = {
|
||||
.pins = sm8250_lpi_pins,
|
||||
.npins = ARRAY_SIZE(sm8250_lpi_pins),
|
||||
.groups = sm8250_groups,
|
||||
.ngroups = ARRAY_SIZE(sm8250_groups),
|
||||
.functions = sm8250_functions,
|
||||
.nfunctions = ARRAY_SIZE(sm8250_functions),
|
||||
};
|
||||
|
||||
static int lpi_gpio_read(struct lpi_pinctrl *state, unsigned int pin,
|
||||
unsigned int addr)
|
||||
{
|
||||
@ -250,38 +42,10 @@ static int lpi_gpio_write(struct lpi_pinctrl *state, unsigned int pin,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lpi_gpio_get_groups_count(struct pinctrl_dev *pctldev)
|
||||
{
|
||||
struct lpi_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
|
||||
|
||||
return pctrl->data->ngroups;
|
||||
}
|
||||
|
||||
static const char *lpi_gpio_get_group_name(struct pinctrl_dev *pctldev,
|
||||
unsigned int group)
|
||||
{
|
||||
struct lpi_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
|
||||
|
||||
return pctrl->data->groups[group].name;
|
||||
}
|
||||
|
||||
static int lpi_gpio_get_group_pins(struct pinctrl_dev *pctldev,
|
||||
unsigned int group,
|
||||
const unsigned int **pins,
|
||||
unsigned int *num_pins)
|
||||
{
|
||||
struct lpi_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
|
||||
|
||||
*pins = pctrl->data->groups[group].pins;
|
||||
*num_pins = pctrl->data->groups[group].npins;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct pinctrl_ops lpi_gpio_pinctrl_ops = {
|
||||
.get_groups_count = lpi_gpio_get_groups_count,
|
||||
.get_group_name = lpi_gpio_get_group_name,
|
||||
.get_group_pins = lpi_gpio_get_group_pins,
|
||||
.get_groups_count = pinctrl_generic_get_group_count,
|
||||
.get_group_name = pinctrl_generic_get_group_name,
|
||||
.get_group_pins = pinctrl_generic_get_group_pins,
|
||||
.dt_node_to_map = pinconf_generic_dt_node_to_map_group,
|
||||
.dt_free_map = pinctrl_utils_free_map,
|
||||
};
|
||||
@ -435,7 +199,7 @@ static int lpi_config_set(struct pinctrl_dev *pctldev, unsigned int group,
|
||||
}
|
||||
|
||||
slew_offset = g->slew_offset;
|
||||
if (slew_offset == NO_SLEW)
|
||||
if (slew_offset == LPI_NO_SLEW)
|
||||
break;
|
||||
|
||||
mutex_lock(&pctrl->slew_access_lock);
|
||||
@ -582,7 +346,29 @@ static const struct gpio_chip lpi_gpio_template = {
|
||||
.dbg_show = lpi_gpio_dbg_show,
|
||||
};
|
||||
|
||||
static int lpi_pinctrl_probe(struct platform_device *pdev)
|
||||
static int lpi_build_pin_desc_groups(struct lpi_pinctrl *pctrl)
|
||||
{
|
||||
int i, ret;
|
||||
|
||||
for (i = 0; i < pctrl->data->npins; i++) {
|
||||
const struct pinctrl_pin_desc *pin_info = pctrl->desc.pins + i;
|
||||
|
||||
ret = pinctrl_generic_add_group(pctrl->ctrl, pin_info->name,
|
||||
(int *)&pin_info->number, 1, NULL);
|
||||
if (ret < 0)
|
||||
goto err_pinctrl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_pinctrl:
|
||||
for (; i > 0; i--)
|
||||
pinctrl_generic_remove_group(pctrl->ctrl, i - 1);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int lpi_pinctrl_probe(struct platform_device *pdev)
|
||||
{
|
||||
const struct lpi_pinctrl_variant_data *data;
|
||||
struct device *dev = &pdev->dev;
|
||||
@ -615,9 +401,13 @@ static int lpi_pinctrl_probe(struct platform_device *pdev)
|
||||
return dev_err_probe(dev, PTR_ERR(pctrl->slew_base),
|
||||
"Slew resource not provided\n");
|
||||
|
||||
ret = devm_clk_bulk_get(dev, MAX_LPI_NUM_CLKS, pctrl->clks);
|
||||
if (of_property_read_bool(dev->of_node, "qcom,adsp-bypass-mode"))
|
||||
ret = devm_clk_bulk_get_optional(dev, MAX_LPI_NUM_CLKS, pctrl->clks);
|
||||
else
|
||||
ret = devm_clk_bulk_get(dev, MAX_LPI_NUM_CLKS, pctrl->clks);
|
||||
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "Can't get clocks\n");
|
||||
return ret;
|
||||
|
||||
ret = clk_bulk_prepare_enable(MAX_LPI_NUM_CLKS, pctrl->clks);
|
||||
if (ret)
|
||||
@ -647,6 +437,10 @@ static int lpi_pinctrl_probe(struct platform_device *pdev)
|
||||
goto err_pinctrl;
|
||||
}
|
||||
|
||||
ret = lpi_build_pin_desc_groups(pctrl);
|
||||
if (ret)
|
||||
goto err_pinctrl;
|
||||
|
||||
ret = devm_gpiochip_add_data(dev, &pctrl->chip, pctrl);
|
||||
if (ret) {
|
||||
dev_err(pctrl->dev, "can't add gpio chip\n");
|
||||
@ -661,35 +455,22 @@ static int lpi_pinctrl_probe(struct platform_device *pdev)
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(lpi_pinctrl_probe);
|
||||
|
||||
static int lpi_pinctrl_remove(struct platform_device *pdev)
|
||||
int lpi_pinctrl_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct lpi_pinctrl *pctrl = platform_get_drvdata(pdev);
|
||||
int i;
|
||||
|
||||
mutex_destroy(&pctrl->slew_access_lock);
|
||||
clk_bulk_disable_unprepare(MAX_LPI_NUM_CLKS, pctrl->clks);
|
||||
|
||||
for (i = 0; i < pctrl->data->npins; i++)
|
||||
pinctrl_generic_remove_group(pctrl->ctrl, i);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(lpi_pinctrl_remove);
|
||||
|
||||
static const struct of_device_id lpi_pinctrl_of_match[] = {
|
||||
{
|
||||
.compatible = "qcom,sm8250-lpass-lpi-pinctrl",
|
||||
.data = &sm8250_lpi_data,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, lpi_pinctrl_of_match);
|
||||
|
||||
static struct platform_driver lpi_pinctrl_driver = {
|
||||
.driver = {
|
||||
.name = "qcom-lpass-lpi-pinctrl",
|
||||
.of_match_table = lpi_pinctrl_of_match,
|
||||
},
|
||||
.probe = lpi_pinctrl_probe,
|
||||
.remove = lpi_pinctrl_remove,
|
||||
};
|
||||
|
||||
module_platform_driver(lpi_pinctrl_driver);
|
||||
MODULE_DESCRIPTION("QTI LPI GPIO pin control driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@ -42,7 +42,6 @@
|
||||
* @chip: gpiochip handle.
|
||||
* @desc: pin controller descriptor
|
||||
* @restart_nb: restart notifier block.
|
||||
* @irq_chip: irq chip information
|
||||
* @irq: parent irq for the TLMM irq_chip.
|
||||
* @intr_target_use_scm: route irq to application cpu using scm calls
|
||||
* @lock: Spinlock to protect register resources as well
|
||||
@ -63,7 +62,6 @@ struct msm_pinctrl {
|
||||
struct pinctrl_desc desc;
|
||||
struct notifier_block restart_nb;
|
||||
|
||||
struct irq_chip irq_chip;
|
||||
int irq;
|
||||
|
||||
bool intr_target_use_scm;
|
||||
@ -868,6 +866,8 @@ static void msm_gpio_irq_enable(struct irq_data *d)
|
||||
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
|
||||
struct msm_pinctrl *pctrl = gpiochip_get_data(gc);
|
||||
|
||||
gpiochip_enable_irq(gc, d->hwirq);
|
||||
|
||||
if (d->parent_data)
|
||||
irq_chip_enable_parent(d);
|
||||
|
||||
@ -885,6 +885,8 @@ static void msm_gpio_irq_disable(struct irq_data *d)
|
||||
|
||||
if (!test_bit(d->hwirq, pctrl->skip_wake_irqs))
|
||||
msm_gpio_irq_mask(d);
|
||||
|
||||
gpiochip_disable_irq(gc, d->hwirq);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -958,6 +960,14 @@ static void msm_gpio_irq_ack(struct irq_data *d)
|
||||
raw_spin_unlock_irqrestore(&pctrl->lock, flags);
|
||||
}
|
||||
|
||||
static void msm_gpio_irq_eoi(struct irq_data *d)
|
||||
{
|
||||
d = d->parent_data;
|
||||
|
||||
if (d)
|
||||
d->chip->irq_eoi(d);
|
||||
}
|
||||
|
||||
static bool msm_gpio_needs_dual_edge_parent_workaround(struct irq_data *d,
|
||||
unsigned int type)
|
||||
{
|
||||
@ -1255,6 +1265,26 @@ static bool msm_gpio_needs_valid_mask(struct msm_pinctrl *pctrl)
|
||||
return device_property_count_u16(pctrl->dev, "gpios") > 0;
|
||||
}
|
||||
|
||||
static const struct irq_chip msm_gpio_irq_chip = {
|
||||
.name = "msmgpio",
|
||||
.irq_enable = msm_gpio_irq_enable,
|
||||
.irq_disable = msm_gpio_irq_disable,
|
||||
.irq_mask = msm_gpio_irq_mask,
|
||||
.irq_unmask = msm_gpio_irq_unmask,
|
||||
.irq_ack = msm_gpio_irq_ack,
|
||||
.irq_eoi = msm_gpio_irq_eoi,
|
||||
.irq_set_type = msm_gpio_irq_set_type,
|
||||
.irq_set_wake = msm_gpio_irq_set_wake,
|
||||
.irq_request_resources = msm_gpio_irq_reqres,
|
||||
.irq_release_resources = msm_gpio_irq_relres,
|
||||
.irq_set_affinity = msm_gpio_irq_set_affinity,
|
||||
.irq_set_vcpu_affinity = msm_gpio_irq_set_vcpu_affinity,
|
||||
.flags = (IRQCHIP_MASK_ON_SUSPEND |
|
||||
IRQCHIP_SET_TYPE_MASKED |
|
||||
IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND |
|
||||
IRQCHIP_IMMUTABLE),
|
||||
};
|
||||
|
||||
static int msm_gpio_init(struct msm_pinctrl *pctrl)
|
||||
{
|
||||
struct gpio_chip *chip;
|
||||
@ -1276,22 +1306,6 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
|
||||
if (msm_gpio_needs_valid_mask(pctrl))
|
||||
chip->init_valid_mask = msm_gpio_init_valid_mask;
|
||||
|
||||
pctrl->irq_chip.name = "msmgpio";
|
||||
pctrl->irq_chip.irq_enable = msm_gpio_irq_enable;
|
||||
pctrl->irq_chip.irq_disable = msm_gpio_irq_disable;
|
||||
pctrl->irq_chip.irq_mask = msm_gpio_irq_mask;
|
||||
pctrl->irq_chip.irq_unmask = msm_gpio_irq_unmask;
|
||||
pctrl->irq_chip.irq_ack = msm_gpio_irq_ack;
|
||||
pctrl->irq_chip.irq_set_type = msm_gpio_irq_set_type;
|
||||
pctrl->irq_chip.irq_set_wake = msm_gpio_irq_set_wake;
|
||||
pctrl->irq_chip.irq_request_resources = msm_gpio_irq_reqres;
|
||||
pctrl->irq_chip.irq_release_resources = msm_gpio_irq_relres;
|
||||
pctrl->irq_chip.irq_set_affinity = msm_gpio_irq_set_affinity;
|
||||
pctrl->irq_chip.irq_set_vcpu_affinity = msm_gpio_irq_set_vcpu_affinity;
|
||||
pctrl->irq_chip.flags = IRQCHIP_MASK_ON_SUSPEND |
|
||||
IRQCHIP_SET_TYPE_MASKED |
|
||||
IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND;
|
||||
|
||||
np = of_parse_phandle(pctrl->dev->of_node, "wakeup-parent", 0);
|
||||
if (np) {
|
||||
chip->irq.parent_domain = irq_find_matching_host(np,
|
||||
@ -1300,7 +1314,6 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
|
||||
if (!chip->irq.parent_domain)
|
||||
return -EPROBE_DEFER;
|
||||
chip->irq.child_to_parent_hwirq = msm_gpio_wakeirq;
|
||||
pctrl->irq_chip.irq_eoi = irq_chip_eoi_parent;
|
||||
/*
|
||||
* Let's skip handling the GPIOs, if the parent irqchip
|
||||
* is handling the direct connect IRQ of the GPIO.
|
||||
@ -1313,7 +1326,7 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
|
||||
}
|
||||
|
||||
girq = &chip->irq;
|
||||
girq->chip = &pctrl->irq_chip;
|
||||
gpio_irq_chip_set_chip(girq, &msm_gpio_irq_chip);
|
||||
girq->parent_handler = msm_gpio_irq_handler;
|
||||
girq->fwnode = pctrl->dev->fwnode;
|
||||
girq->num_parents = 1;
|
||||
|
@ -844,8 +844,8 @@ static const struct msm_pingroup msm8916_groups[] = {
|
||||
PINGROUP(28, pwr_modem_enabled_a, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, atest_combodac),
|
||||
PINGROUP(29, cci_i2c, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, atest_combodac),
|
||||
PINGROUP(30, cci_i2c, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
|
||||
PINGROUP(31, cci_timer0, NA, NA, NA, NA, NA, NA, NA, NA),
|
||||
PINGROUP(32, cci_timer1, NA, NA, NA, NA, NA, NA, NA, NA),
|
||||
PINGROUP(31, cci_timer0, flash_strobe, NA, NA, NA, NA, NA, NA, NA),
|
||||
PINGROUP(32, cci_timer1, flash_strobe, NA, NA, NA, NA, NA, NA, NA),
|
||||
PINGROUP(33, cci_async, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
|
||||
PINGROUP(34, pwr_nav_enabled_a, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
|
||||
PINGROUP(35, pwr_crypto_enabled_a, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
|
||||
|
@ -1500,6 +1500,25 @@ static const struct msm_pingroup sm8150_groups[] = {
|
||||
[178] = SDC_QDSD_PINGROUP(sdc2_data, 0xB2000, 9, 0),
|
||||
};
|
||||
|
||||
static const struct msm_gpio_wakeirq_map sm8150_pdc_map[] = {
|
||||
{ 3, 31 }, { 5, 32 }, { 8, 33 }, { 9, 34 }, { 10, 100 },
|
||||
{ 12, 104 }, { 24, 37 }, { 26, 38 }, { 27, 41 }, { 28, 42 },
|
||||
{ 30, 39 }, { 36, 43 }, { 37, 44 }, { 38, 30 }, { 39, 118 },
|
||||
{ 39, 125 }, { 41, 47 }, { 42, 48 }, { 46, 50 }, { 47, 49 },
|
||||
{ 48, 51 }, { 49, 53 }, { 50, 52 }, { 51, 116 }, { 51, 123 },
|
||||
{ 53, 54 }, { 54, 55 }, { 55, 56 }, { 56, 57 }, { 58, 58 },
|
||||
{ 60, 60 }, { 61, 61 }, { 68, 62 }, { 70, 63 }, { 76, 71 },
|
||||
{ 77, 66 }, { 81, 64 }, { 83, 65 }, { 86, 67 }, { 87, 84 },
|
||||
{ 88, 117 }, { 88, 124 }, { 90, 69 }, { 91, 70 }, { 93, 75 },
|
||||
{ 95, 72 }, { 96, 73 }, { 97, 74 }, { 101, 40 }, { 103, 77 },
|
||||
{ 104, 78 }, { 108, 79 }, { 112, 80 }, { 113, 81 }, { 114, 82 },
|
||||
{ 117, 85 }, { 118, 101 }, { 119, 87 }, { 120, 88 }, { 121, 89 },
|
||||
{ 122, 90 }, { 123, 91 }, { 124, 92 }, { 125, 93 }, { 129, 94 },
|
||||
{ 132, 105 }, { 133, 83 }, { 134, 36 }, { 136, 97 }, { 142, 103 },
|
||||
{ 144, 115 }, { 144, 122 }, { 147, 102 }, { 150, 107 },
|
||||
{ 152, 108 }, { 153, 109 }
|
||||
};
|
||||
|
||||
static const struct msm_pinctrl_soc_data sm8150_pinctrl = {
|
||||
.pins = sm8150_pins,
|
||||
.npins = ARRAY_SIZE(sm8150_pins),
|
||||
@ -1510,6 +1529,9 @@ static const struct msm_pinctrl_soc_data sm8150_pinctrl = {
|
||||
.ngpios = 176,
|
||||
.tiles = sm8150_tiles,
|
||||
.ntiles = ARRAY_SIZE(sm8150_tiles),
|
||||
.wakeirq_map = sm8150_pdc_map,
|
||||
.nwakeirq_map = ARRAY_SIZE(sm8150_pdc_map),
|
||||
.wakeirq_dual_edge_errata = true,
|
||||
};
|
||||
|
||||
static int sm8150_pinctrl_probe(struct platform_device *pdev)
|
||||
|
@ -1316,7 +1316,7 @@ static const struct msm_pingroup sm8250_groups[] = {
|
||||
static const struct msm_gpio_wakeirq_map sm8250_pdc_map[] = {
|
||||
{ 0, 79 }, { 1, 84 }, { 2, 80 }, { 3, 82 }, { 4, 107 }, { 7, 43 },
|
||||
{ 11, 42 }, { 14, 44 }, { 15, 52 }, { 19, 67 }, { 23, 68 }, { 24, 105 },
|
||||
{ 27, 92 }, { 28, 106 }, { 31, 69 }, { 35, 70 }, { 39, 37 },
|
||||
{ 27, 92 }, { 28, 106 }, { 31, 69 }, { 35, 70 }, { 39, 73 },
|
||||
{ 40, 108 }, { 43, 71 }, { 45, 72 }, { 47, 83 }, { 51, 74 }, { 55, 77 },
|
||||
{ 59, 78 }, { 63, 75 }, { 64, 81 }, { 65, 87 }, { 66, 88 }, { 67, 89 },
|
||||
{ 68, 54 }, { 70, 85 }, { 77, 46 }, { 80, 90 }, { 81, 91 }, { 83, 97 },
|
||||
|
@ -966,16 +966,13 @@ static int pmic_gpio_child_to_parent_hwirq(struct gpio_chip *chip,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void *pmic_gpio_populate_parent_fwspec(struct gpio_chip *chip,
|
||||
unsigned int parent_hwirq,
|
||||
unsigned int parent_type)
|
||||
static int pmic_gpio_populate_parent_fwspec(struct gpio_chip *chip,
|
||||
union gpio_irq_fwspec *gfwspec,
|
||||
unsigned int parent_hwirq,
|
||||
unsigned int parent_type)
|
||||
{
|
||||
struct pmic_gpio_state *state = gpiochip_get_data(chip);
|
||||
struct irq_fwspec *fwspec;
|
||||
|
||||
fwspec = kzalloc(sizeof(*fwspec), GFP_KERNEL);
|
||||
if (!fwspec)
|
||||
return NULL;
|
||||
struct irq_fwspec *fwspec = &gfwspec->fwspec;
|
||||
|
||||
fwspec->fwnode = chip->irq.parent_domain->fwnode;
|
||||
|
||||
@ -985,7 +982,7 @@ static void *pmic_gpio_populate_parent_fwspec(struct gpio_chip *chip,
|
||||
/* param[2] must be left as 0 */
|
||||
fwspec->param[3] = parent_type;
|
||||
|
||||
return fwspec;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pmic_gpio_probe(struct platform_device *pdev)
|
||||
@ -1146,6 +1143,7 @@ static const struct of_device_id pmic_gpio_of_match[] = {
|
||||
{ .compatible = "qcom,pm660-gpio", .data = (void *) 13 },
|
||||
/* pm660l has 12 GPIOs with holes on 1, 2, 10, 11 and 12 */
|
||||
{ .compatible = "qcom,pm660l-gpio", .data = (void *) 12 },
|
||||
{ .compatible = "qcom,pm6125-gpio", .data = (void *) 9 },
|
||||
{ .compatible = "qcom,pm6150-gpio", .data = (void *) 10 },
|
||||
{ .compatible = "qcom,pm6150l-gpio", .data = (void *) 12 },
|
||||
{ .compatible = "qcom,pm6350-gpio", .data = (void *) 9 },
|
||||
@ -1161,6 +1159,7 @@ static const struct of_device_id pmic_gpio_of_match[] = {
|
||||
/* pm8150l has 12 GPIOs with holes on 7 */
|
||||
{ .compatible = "qcom,pm8150l-gpio", .data = (void *) 12 },
|
||||
{ .compatible = "qcom,pmc8180c-gpio", .data = (void *) 12 },
|
||||
{ .compatible = "qcom,pm8226-gpio", .data = (void *) 8 },
|
||||
{ .compatible = "qcom,pm8350-gpio", .data = (void *) 10 },
|
||||
{ .compatible = "qcom,pm8350b-gpio", .data = (void *) 8 },
|
||||
{ .compatible = "qcom,pm8350c-gpio", .data = (void *) 9 },
|
||||
@ -1177,12 +1176,15 @@ static const struct of_device_id pmic_gpio_of_match[] = {
|
||||
{ .compatible = "qcom,pmi8998-gpio", .data = (void *) 14 },
|
||||
{ .compatible = "qcom,pmk8350-gpio", .data = (void *) 4 },
|
||||
{ .compatible = "qcom,pmm8155au-gpio", .data = (void *) 10 },
|
||||
/* pmp8074 has 12 GPIOs with holes on 1 and 12 */
|
||||
{ .compatible = "qcom,pmp8074-gpio", .data = (void *) 12 },
|
||||
{ .compatible = "qcom,pmr735a-gpio", .data = (void *) 4 },
|
||||
{ .compatible = "qcom,pmr735b-gpio", .data = (void *) 4 },
|
||||
/* pms405 has 12 GPIOs with holes on 1, 9, and 10 */
|
||||
{ .compatible = "qcom,pms405-gpio", .data = (void *) 12 },
|
||||
/* pmx55 has 11 GPIOs with holes on 3, 7, 10, 11 */
|
||||
{ .compatible = "qcom,pmx55-gpio", .data = (void *) 11 },
|
||||
{ .compatible = "qcom,pmx65-gpio", .data = (void *) 16 },
|
||||
{ },
|
||||
};
|
||||
|
||||
|
@ -3,37 +3,33 @@ menu "Ralink pinctrl drivers"
|
||||
depends on RALINK
|
||||
|
||||
config PINCTRL_RALINK
|
||||
bool "Ralink pin control support"
|
||||
default y if RALINK
|
||||
|
||||
config PINCTRL_RT2880
|
||||
bool "RT2880 pinctrl driver for RALINK/Mediatek SOCs"
|
||||
bool "Ralink pinctrl driver"
|
||||
select PINMUX
|
||||
select GENERIC_PINCONF
|
||||
|
||||
config PINCTRL_MT7620
|
||||
bool "mt7620 pinctrl driver for RALINK/Mediatek SOCs"
|
||||
bool "MT7620 pinctrl subdriver"
|
||||
depends on RALINK && SOC_MT7620
|
||||
select PINCTRL_RT2880
|
||||
select PINCTRL_RALINK
|
||||
|
||||
config PINCTRL_MT7621
|
||||
bool "mt7621 pinctrl driver for RALINK/Mediatek SOCs"
|
||||
bool "MT7621 pinctrl subdriver"
|
||||
depends on RALINK && SOC_MT7621
|
||||
select PINCTRL_RT2880
|
||||
select PINCTRL_RALINK
|
||||
|
||||
config PINCTRL_RT288X
|
||||
bool "RT288X pinctrl driver for RALINK/Mediatek SOCs"
|
||||
config PINCTRL_RT2880
|
||||
bool "RT2880 pinctrl subdriver"
|
||||
depends on RALINK && SOC_RT288X
|
||||
select PINCTRL_RT2880
|
||||
select PINCTRL_RALINK
|
||||
|
||||
config PINCTRL_RT305X
|
||||
bool "RT305X pinctrl driver for RALINK/Mediatek SOCs"
|
||||
bool "RT305X pinctrl subdriver"
|
||||
depends on RALINK && SOC_RT305X
|
||||
select PINCTRL_RT2880
|
||||
select PINCTRL_RALINK
|
||||
|
||||
config PINCTRL_RT3883
|
||||
bool "RT3883 pinctrl driver for RALINK/Mediatek SOCs"
|
||||
bool "RT3883 pinctrl subdriver"
|
||||
depends on RALINK && SOC_RT3883
|
||||
select PINCTRL_RT2880
|
||||
select PINCTRL_RALINK
|
||||
|
||||
endmenu
|
||||
|
@ -1,8 +1,8 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
obj-$(CONFIG_PINCTRL_RT2880) += pinctrl-rt2880.o
|
||||
obj-$(CONFIG_PINCTRL_RALINK) += pinctrl-ralink.o
|
||||
|
||||
obj-$(CONFIG_PINCTRL_MT7620) += pinctrl-mt7620.o
|
||||
obj-$(CONFIG_PINCTRL_MT7621) += pinctrl-mt7621.o
|
||||
obj-$(CONFIG_PINCTRL_RT288X) += pinctrl-rt288x.o
|
||||
obj-$(CONFIG_PINCTRL_RT2880) += pinctrl-rt2880.o
|
||||
obj-$(CONFIG_PINCTRL_RT305X) += pinctrl-rt305x.o
|
||||
obj-$(CONFIG_PINCTRL_RT3883) += pinctrl-rt3883.o
|
||||
|
@ -5,7 +5,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/of.h>
|
||||
#include "pinmux.h"
|
||||
#include "pinctrl-ralink.h"
|
||||
|
||||
#define MT7620_GPIO_MODE_UART0_SHIFT 2
|
||||
#define MT7620_GPIO_MODE_UART0_MASK 0x7
|
||||
@ -54,20 +54,20 @@
|
||||
#define MT7620_GPIO_MODE_EPHY 15
|
||||
#define MT7620_GPIO_MODE_PA 20
|
||||
|
||||
static struct rt2880_pmx_func i2c_grp[] = { FUNC("i2c", 0, 1, 2) };
|
||||
static struct rt2880_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };
|
||||
static struct rt2880_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };
|
||||
static struct rt2880_pmx_func mdio_grp[] = {
|
||||
static struct ralink_pmx_func i2c_func[] = { FUNC("i2c", 0, 1, 2) };
|
||||
static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
|
||||
static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
|
||||
static struct ralink_pmx_func mdio_func[] = {
|
||||
FUNC("mdio", MT7620_GPIO_MODE_MDIO, 22, 2),
|
||||
FUNC("refclk", MT7620_GPIO_MODE_MDIO_REFCLK, 22, 2),
|
||||
};
|
||||
static struct rt2880_pmx_func rgmii1_grp[] = { FUNC("rgmii1", 0, 24, 12) };
|
||||
static struct rt2880_pmx_func refclk_grp[] = { FUNC("spi refclk", 0, 37, 3) };
|
||||
static struct rt2880_pmx_func ephy_grp[] = { FUNC("ephy", 0, 40, 5) };
|
||||
static struct rt2880_pmx_func rgmii2_grp[] = { FUNC("rgmii2", 0, 60, 12) };
|
||||
static struct rt2880_pmx_func wled_grp[] = { FUNC("wled", 0, 72, 1) };
|
||||
static struct rt2880_pmx_func pa_grp[] = { FUNC("pa", 0, 18, 4) };
|
||||
static struct rt2880_pmx_func uartf_grp[] = {
|
||||
static struct ralink_pmx_func rgmii1_func[] = { FUNC("rgmii1", 0, 24, 12) };
|
||||
static struct ralink_pmx_func refclk_func[] = { FUNC("spi refclk", 0, 37, 3) };
|
||||
static struct ralink_pmx_func ephy_func[] = { FUNC("ephy", 0, 40, 5) };
|
||||
static struct ralink_pmx_func rgmii2_func[] = { FUNC("rgmii2", 0, 60, 12) };
|
||||
static struct ralink_pmx_func wled_func[] = { FUNC("wled", 0, 72, 1) };
|
||||
static struct ralink_pmx_func pa_func[] = { FUNC("pa", 0, 18, 4) };
|
||||
static struct ralink_pmx_func uartf_func[] = {
|
||||
FUNC("uartf", MT7620_GPIO_MODE_UARTF, 7, 8),
|
||||
FUNC("pcm uartf", MT7620_GPIO_MODE_PCM_UARTF, 7, 8),
|
||||
FUNC("pcm i2s", MT7620_GPIO_MODE_PCM_I2S, 7, 8),
|
||||
@ -76,316 +76,316 @@ static struct rt2880_pmx_func uartf_grp[] = {
|
||||
FUNC("gpio uartf", MT7620_GPIO_MODE_GPIO_UARTF, 7, 4),
|
||||
FUNC("gpio i2s", MT7620_GPIO_MODE_GPIO_I2S, 7, 4),
|
||||
};
|
||||
static struct rt2880_pmx_func wdt_grp[] = {
|
||||
static struct ralink_pmx_func wdt_func[] = {
|
||||
FUNC("wdt rst", 0, 17, 1),
|
||||
FUNC("wdt refclk", 0, 17, 1),
|
||||
};
|
||||
static struct rt2880_pmx_func pcie_rst_grp[] = {
|
||||
static struct ralink_pmx_func pcie_rst_func[] = {
|
||||
FUNC("pcie rst", MT7620_GPIO_MODE_PCIE_RST, 36, 1),
|
||||
FUNC("pcie refclk", MT7620_GPIO_MODE_PCIE_REF, 36, 1)
|
||||
};
|
||||
static struct rt2880_pmx_func nd_sd_grp[] = {
|
||||
static struct ralink_pmx_func nd_sd_func[] = {
|
||||
FUNC("nand", MT7620_GPIO_MODE_NAND, 45, 15),
|
||||
FUNC("sd", MT7620_GPIO_MODE_SD, 47, 13)
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_group mt7620a_pinmux_data[] = {
|
||||
GRP("i2c", i2c_grp, 1, MT7620_GPIO_MODE_I2C),
|
||||
GRP("uartf", uartf_grp, MT7620_GPIO_MODE_UART0_MASK,
|
||||
static struct ralink_pmx_group mt7620a_pinmux_data[] = {
|
||||
GRP("i2c", i2c_func, 1, MT7620_GPIO_MODE_I2C),
|
||||
GRP("uartf", uartf_func, MT7620_GPIO_MODE_UART0_MASK,
|
||||
MT7620_GPIO_MODE_UART0_SHIFT),
|
||||
GRP("spi", spi_grp, 1, MT7620_GPIO_MODE_SPI),
|
||||
GRP("uartlite", uartlite_grp, 1, MT7620_GPIO_MODE_UART1),
|
||||
GRP_G("wdt", wdt_grp, MT7620_GPIO_MODE_WDT_MASK,
|
||||
GRP("spi", spi_func, 1, MT7620_GPIO_MODE_SPI),
|
||||
GRP("uartlite", uartlite_func, 1, MT7620_GPIO_MODE_UART1),
|
||||
GRP_G("wdt", wdt_func, MT7620_GPIO_MODE_WDT_MASK,
|
||||
MT7620_GPIO_MODE_WDT_GPIO, MT7620_GPIO_MODE_WDT_SHIFT),
|
||||
GRP_G("mdio", mdio_grp, MT7620_GPIO_MODE_MDIO_MASK,
|
||||
GRP_G("mdio", mdio_func, MT7620_GPIO_MODE_MDIO_MASK,
|
||||
MT7620_GPIO_MODE_MDIO_GPIO, MT7620_GPIO_MODE_MDIO_SHIFT),
|
||||
GRP("rgmii1", rgmii1_grp, 1, MT7620_GPIO_MODE_RGMII1),
|
||||
GRP("spi refclk", refclk_grp, 1, MT7620_GPIO_MODE_SPI_REF_CLK),
|
||||
GRP_G("pcie", pcie_rst_grp, MT7620_GPIO_MODE_PCIE_MASK,
|
||||
GRP("rgmii1", rgmii1_func, 1, MT7620_GPIO_MODE_RGMII1),
|
||||
GRP("spi refclk", refclk_func, 1, MT7620_GPIO_MODE_SPI_REF_CLK),
|
||||
GRP_G("pcie", pcie_rst_func, MT7620_GPIO_MODE_PCIE_MASK,
|
||||
MT7620_GPIO_MODE_PCIE_GPIO, MT7620_GPIO_MODE_PCIE_SHIFT),
|
||||
GRP_G("nd_sd", nd_sd_grp, MT7620_GPIO_MODE_ND_SD_MASK,
|
||||
GRP_G("nd_sd", nd_sd_func, MT7620_GPIO_MODE_ND_SD_MASK,
|
||||
MT7620_GPIO_MODE_ND_SD_GPIO, MT7620_GPIO_MODE_ND_SD_SHIFT),
|
||||
GRP("rgmii2", rgmii2_grp, 1, MT7620_GPIO_MODE_RGMII2),
|
||||
GRP("wled", wled_grp, 1, MT7620_GPIO_MODE_WLED),
|
||||
GRP("ephy", ephy_grp, 1, MT7620_GPIO_MODE_EPHY),
|
||||
GRP("pa", pa_grp, 1, MT7620_GPIO_MODE_PA),
|
||||
GRP("rgmii2", rgmii2_func, 1, MT7620_GPIO_MODE_RGMII2),
|
||||
GRP("wled", wled_func, 1, MT7620_GPIO_MODE_WLED),
|
||||
GRP("ephy", ephy_func, 1, MT7620_GPIO_MODE_EPHY),
|
||||
GRP("pa", pa_func, 1, MT7620_GPIO_MODE_PA),
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func pwm1_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func pwm1_func_mt76x8[] = {
|
||||
FUNC("sdxc d6", 3, 19, 1),
|
||||
FUNC("utif", 2, 19, 1),
|
||||
FUNC("gpio", 1, 19, 1),
|
||||
FUNC("pwm1", 0, 19, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func pwm0_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func pwm0_func_mt76x8[] = {
|
||||
FUNC("sdxc d7", 3, 18, 1),
|
||||
FUNC("utif", 2, 18, 1),
|
||||
FUNC("gpio", 1, 18, 1),
|
||||
FUNC("pwm0", 0, 18, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func uart2_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func uart2_func_mt76x8[] = {
|
||||
FUNC("sdxc d5 d4", 3, 20, 2),
|
||||
FUNC("pwm", 2, 20, 2),
|
||||
FUNC("gpio", 1, 20, 2),
|
||||
FUNC("uart2", 0, 20, 2),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func uart1_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func uart1_func_mt76x8[] = {
|
||||
FUNC("sw_r", 3, 45, 2),
|
||||
FUNC("pwm", 2, 45, 2),
|
||||
FUNC("gpio", 1, 45, 2),
|
||||
FUNC("uart1", 0, 45, 2),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func i2c_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func i2c_func_mt76x8[] = {
|
||||
FUNC("-", 3, 4, 2),
|
||||
FUNC("debug", 2, 4, 2),
|
||||
FUNC("gpio", 1, 4, 2),
|
||||
FUNC("i2c", 0, 4, 2),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func refclk_grp_mt7628[] = { FUNC("refclk", 0, 37, 1) };
|
||||
static struct rt2880_pmx_func perst_grp_mt7628[] = { FUNC("perst", 0, 36, 1) };
|
||||
static struct rt2880_pmx_func wdt_grp_mt7628[] = { FUNC("wdt", 0, 38, 1) };
|
||||
static struct rt2880_pmx_func spi_grp_mt7628[] = { FUNC("spi", 0, 7, 4) };
|
||||
static struct ralink_pmx_func refclk_func_mt76x8[] = { FUNC("refclk", 0, 37, 1) };
|
||||
static struct ralink_pmx_func perst_func_mt76x8[] = { FUNC("perst", 0, 36, 1) };
|
||||
static struct ralink_pmx_func wdt_func_mt76x8[] = { FUNC("wdt", 0, 38, 1) };
|
||||
static struct ralink_pmx_func spi_func_mt76x8[] = { FUNC("spi", 0, 7, 4) };
|
||||
|
||||
static struct rt2880_pmx_func sd_mode_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func sd_mode_func_mt76x8[] = {
|
||||
FUNC("jtag", 3, 22, 8),
|
||||
FUNC("utif", 2, 22, 8),
|
||||
FUNC("gpio", 1, 22, 8),
|
||||
FUNC("sdxc", 0, 22, 8),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func uart0_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func uart0_func_mt76x8[] = {
|
||||
FUNC("-", 3, 12, 2),
|
||||
FUNC("-", 2, 12, 2),
|
||||
FUNC("gpio", 1, 12, 2),
|
||||
FUNC("uart0", 0, 12, 2),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func i2s_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func i2s_func_mt76x8[] = {
|
||||
FUNC("antenna", 3, 0, 4),
|
||||
FUNC("pcm", 2, 0, 4),
|
||||
FUNC("gpio", 1, 0, 4),
|
||||
FUNC("i2s", 0, 0, 4),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func spi_cs1_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func spi_cs1_func_mt76x8[] = {
|
||||
FUNC("-", 3, 6, 1),
|
||||
FUNC("refclk", 2, 6, 1),
|
||||
FUNC("gpio", 1, 6, 1),
|
||||
FUNC("spi cs1", 0, 6, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func spis_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func spis_func_mt76x8[] = {
|
||||
FUNC("pwm_uart2", 3, 14, 4),
|
||||
FUNC("utif", 2, 14, 4),
|
||||
FUNC("gpio", 1, 14, 4),
|
||||
FUNC("spis", 0, 14, 4),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func gpio_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func gpio_func_mt76x8[] = {
|
||||
FUNC("pcie", 3, 11, 1),
|
||||
FUNC("refclk", 2, 11, 1),
|
||||
FUNC("gpio", 1, 11, 1),
|
||||
FUNC("gpio", 0, 11, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func p4led_kn_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func p4led_kn_func_mt76x8[] = {
|
||||
FUNC("jtag", 3, 30, 1),
|
||||
FUNC("utif", 2, 30, 1),
|
||||
FUNC("gpio", 1, 30, 1),
|
||||
FUNC("p4led_kn", 0, 30, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func p3led_kn_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func p3led_kn_func_mt76x8[] = {
|
||||
FUNC("jtag", 3, 31, 1),
|
||||
FUNC("utif", 2, 31, 1),
|
||||
FUNC("gpio", 1, 31, 1),
|
||||
FUNC("p3led_kn", 0, 31, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func p2led_kn_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func p2led_kn_func_mt76x8[] = {
|
||||
FUNC("jtag", 3, 32, 1),
|
||||
FUNC("utif", 2, 32, 1),
|
||||
FUNC("gpio", 1, 32, 1),
|
||||
FUNC("p2led_kn", 0, 32, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func p1led_kn_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func p1led_kn_func_mt76x8[] = {
|
||||
FUNC("jtag", 3, 33, 1),
|
||||
FUNC("utif", 2, 33, 1),
|
||||
FUNC("gpio", 1, 33, 1),
|
||||
FUNC("p1led_kn", 0, 33, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func p0led_kn_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func p0led_kn_func_mt76x8[] = {
|
||||
FUNC("jtag", 3, 34, 1),
|
||||
FUNC("rsvd", 2, 34, 1),
|
||||
FUNC("gpio", 1, 34, 1),
|
||||
FUNC("p0led_kn", 0, 34, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func wled_kn_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func wled_kn_func_mt76x8[] = {
|
||||
FUNC("rsvd", 3, 35, 1),
|
||||
FUNC("rsvd", 2, 35, 1),
|
||||
FUNC("gpio", 1, 35, 1),
|
||||
FUNC("wled_kn", 0, 35, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func p4led_an_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func p4led_an_func_mt76x8[] = {
|
||||
FUNC("jtag", 3, 39, 1),
|
||||
FUNC("utif", 2, 39, 1),
|
||||
FUNC("gpio", 1, 39, 1),
|
||||
FUNC("p4led_an", 0, 39, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func p3led_an_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func p3led_an_func_mt76x8[] = {
|
||||
FUNC("jtag", 3, 40, 1),
|
||||
FUNC("utif", 2, 40, 1),
|
||||
FUNC("gpio", 1, 40, 1),
|
||||
FUNC("p3led_an", 0, 40, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func p2led_an_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func p2led_an_func_mt76x8[] = {
|
||||
FUNC("jtag", 3, 41, 1),
|
||||
FUNC("utif", 2, 41, 1),
|
||||
FUNC("gpio", 1, 41, 1),
|
||||
FUNC("p2led_an", 0, 41, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func p1led_an_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func p1led_an_func_mt76x8[] = {
|
||||
FUNC("jtag", 3, 42, 1),
|
||||
FUNC("utif", 2, 42, 1),
|
||||
FUNC("gpio", 1, 42, 1),
|
||||
FUNC("p1led_an", 0, 42, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func p0led_an_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func p0led_an_func_mt76x8[] = {
|
||||
FUNC("jtag", 3, 43, 1),
|
||||
FUNC("rsvd", 2, 43, 1),
|
||||
FUNC("gpio", 1, 43, 1),
|
||||
FUNC("p0led_an", 0, 43, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func wled_an_grp_mt7628[] = {
|
||||
static struct ralink_pmx_func wled_an_func_mt76x8[] = {
|
||||
FUNC("rsvd", 3, 44, 1),
|
||||
FUNC("rsvd", 2, 44, 1),
|
||||
FUNC("gpio", 1, 44, 1),
|
||||
FUNC("wled_an", 0, 44, 1),
|
||||
};
|
||||
|
||||
#define MT7628_GPIO_MODE_MASK 0x3
|
||||
#define MT76X8_GPIO_MODE_MASK 0x3
|
||||
|
||||
#define MT7628_GPIO_MODE_P4LED_KN 58
|
||||
#define MT7628_GPIO_MODE_P3LED_KN 56
|
||||
#define MT7628_GPIO_MODE_P2LED_KN 54
|
||||
#define MT7628_GPIO_MODE_P1LED_KN 52
|
||||
#define MT7628_GPIO_MODE_P0LED_KN 50
|
||||
#define MT7628_GPIO_MODE_WLED_KN 48
|
||||
#define MT7628_GPIO_MODE_P4LED_AN 42
|
||||
#define MT7628_GPIO_MODE_P3LED_AN 40
|
||||
#define MT7628_GPIO_MODE_P2LED_AN 38
|
||||
#define MT7628_GPIO_MODE_P1LED_AN 36
|
||||
#define MT7628_GPIO_MODE_P0LED_AN 34
|
||||
#define MT7628_GPIO_MODE_WLED_AN 32
|
||||
#define MT7628_GPIO_MODE_PWM1 30
|
||||
#define MT7628_GPIO_MODE_PWM0 28
|
||||
#define MT7628_GPIO_MODE_UART2 26
|
||||
#define MT7628_GPIO_MODE_UART1 24
|
||||
#define MT7628_GPIO_MODE_I2C 20
|
||||
#define MT7628_GPIO_MODE_REFCLK 18
|
||||
#define MT7628_GPIO_MODE_PERST 16
|
||||
#define MT7628_GPIO_MODE_WDT 14
|
||||
#define MT7628_GPIO_MODE_SPI 12
|
||||
#define MT7628_GPIO_MODE_SDMODE 10
|
||||
#define MT7628_GPIO_MODE_UART0 8
|
||||
#define MT7628_GPIO_MODE_I2S 6
|
||||
#define MT7628_GPIO_MODE_CS1 4
|
||||
#define MT7628_GPIO_MODE_SPIS 2
|
||||
#define MT7628_GPIO_MODE_GPIO 0
|
||||
#define MT76X8_GPIO_MODE_P4LED_KN 58
|
||||
#define MT76X8_GPIO_MODE_P3LED_KN 56
|
||||
#define MT76X8_GPIO_MODE_P2LED_KN 54
|
||||
#define MT76X8_GPIO_MODE_P1LED_KN 52
|
||||
#define MT76X8_GPIO_MODE_P0LED_KN 50
|
||||
#define MT76X8_GPIO_MODE_WLED_KN 48
|
||||
#define MT76X8_GPIO_MODE_P4LED_AN 42
|
||||
#define MT76X8_GPIO_MODE_P3LED_AN 40
|
||||
#define MT76X8_GPIO_MODE_P2LED_AN 38
|
||||
#define MT76X8_GPIO_MODE_P1LED_AN 36
|
||||
#define MT76X8_GPIO_MODE_P0LED_AN 34
|
||||
#define MT76X8_GPIO_MODE_WLED_AN 32
|
||||
#define MT76X8_GPIO_MODE_PWM1 30
|
||||
#define MT76X8_GPIO_MODE_PWM0 28
|
||||
#define MT76X8_GPIO_MODE_UART2 26
|
||||
#define MT76X8_GPIO_MODE_UART1 24
|
||||
#define MT76X8_GPIO_MODE_I2C 20
|
||||
#define MT76X8_GPIO_MODE_REFCLK 18
|
||||
#define MT76X8_GPIO_MODE_PERST 16
|
||||
#define MT76X8_GPIO_MODE_WDT 14
|
||||
#define MT76X8_GPIO_MODE_SPI 12
|
||||
#define MT76X8_GPIO_MODE_SDMODE 10
|
||||
#define MT76X8_GPIO_MODE_UART0 8
|
||||
#define MT76X8_GPIO_MODE_I2S 6
|
||||
#define MT76X8_GPIO_MODE_CS1 4
|
||||
#define MT76X8_GPIO_MODE_SPIS 2
|
||||
#define MT76X8_GPIO_MODE_GPIO 0
|
||||
|
||||
static struct rt2880_pmx_group mt7628an_pinmux_data[] = {
|
||||
GRP_G("pwm1", pwm1_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_PWM1),
|
||||
GRP_G("pwm0", pwm0_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_PWM0),
|
||||
GRP_G("uart2", uart2_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_UART2),
|
||||
GRP_G("uart1", uart1_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_UART1),
|
||||
GRP_G("i2c", i2c_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_I2C),
|
||||
GRP("refclk", refclk_grp_mt7628, 1, MT7628_GPIO_MODE_REFCLK),
|
||||
GRP("perst", perst_grp_mt7628, 1, MT7628_GPIO_MODE_PERST),
|
||||
GRP("wdt", wdt_grp_mt7628, 1, MT7628_GPIO_MODE_WDT),
|
||||
GRP("spi", spi_grp_mt7628, 1, MT7628_GPIO_MODE_SPI),
|
||||
GRP_G("sdmode", sd_mode_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_SDMODE),
|
||||
GRP_G("uart0", uart0_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_UART0),
|
||||
GRP_G("i2s", i2s_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_I2S),
|
||||
GRP_G("spi cs1", spi_cs1_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_CS1),
|
||||
GRP_G("spis", spis_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_SPIS),
|
||||
GRP_G("gpio", gpio_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_GPIO),
|
||||
GRP_G("wled_an", wled_an_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_WLED_AN),
|
||||
GRP_G("p0led_an", p0led_an_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_P0LED_AN),
|
||||
GRP_G("p1led_an", p1led_an_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_P1LED_AN),
|
||||
GRP_G("p2led_an", p2led_an_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_P2LED_AN),
|
||||
GRP_G("p3led_an", p3led_an_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_P3LED_AN),
|
||||
GRP_G("p4led_an", p4led_an_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_P4LED_AN),
|
||||
GRP_G("wled_kn", wled_kn_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_WLED_KN),
|
||||
GRP_G("p0led_kn", p0led_kn_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_P0LED_KN),
|
||||
GRP_G("p1led_kn", p1led_kn_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_P1LED_KN),
|
||||
GRP_G("p2led_kn", p2led_kn_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_P2LED_KN),
|
||||
GRP_G("p3led_kn", p3led_kn_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_P3LED_KN),
|
||||
GRP_G("p4led_kn", p4led_kn_grp_mt7628, MT7628_GPIO_MODE_MASK,
|
||||
1, MT7628_GPIO_MODE_P4LED_KN),
|
||||
static struct ralink_pmx_group mt76x8_pinmux_data[] = {
|
||||
GRP_G("pwm1", pwm1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_PWM1),
|
||||
GRP_G("pwm0", pwm0_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_PWM0),
|
||||
GRP_G("uart2", uart2_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_UART2),
|
||||
GRP_G("uart1", uart1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_UART1),
|
||||
GRP_G("i2c", i2c_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_I2C),
|
||||
GRP("refclk", refclk_func_mt76x8, 1, MT76X8_GPIO_MODE_REFCLK),
|
||||
GRP("perst", perst_func_mt76x8, 1, MT76X8_GPIO_MODE_PERST),
|
||||
GRP("wdt", wdt_func_mt76x8, 1, MT76X8_GPIO_MODE_WDT),
|
||||
GRP("spi", spi_func_mt76x8, 1, MT76X8_GPIO_MODE_SPI),
|
||||
GRP_G("sdmode", sd_mode_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_SDMODE),
|
||||
GRP_G("uart0", uart0_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_UART0),
|
||||
GRP_G("i2s", i2s_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_I2S),
|
||||
GRP_G("spi cs1", spi_cs1_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_CS1),
|
||||
GRP_G("spis", spis_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_SPIS),
|
||||
GRP_G("gpio", gpio_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_GPIO),
|
||||
GRP_G("wled_an", wled_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_WLED_AN),
|
||||
GRP_G("p0led_an", p0led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_P0LED_AN),
|
||||
GRP_G("p1led_an", p1led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_P1LED_AN),
|
||||
GRP_G("p2led_an", p2led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_P2LED_AN),
|
||||
GRP_G("p3led_an", p3led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_P3LED_AN),
|
||||
GRP_G("p4led_an", p4led_an_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_P4LED_AN),
|
||||
GRP_G("wled_kn", wled_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_WLED_KN),
|
||||
GRP_G("p0led_kn", p0led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_P0LED_KN),
|
||||
GRP_G("p1led_kn", p1led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_P1LED_KN),
|
||||
GRP_G("p2led_kn", p2led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_P2LED_KN),
|
||||
GRP_G("p3led_kn", p3led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_P3LED_KN),
|
||||
GRP_G("p4led_kn", p4led_kn_func_mt76x8, MT76X8_GPIO_MODE_MASK,
|
||||
1, MT76X8_GPIO_MODE_P4LED_KN),
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static int mt7620_pinmux_probe(struct platform_device *pdev)
|
||||
static int mt7620_pinctrl_probe(struct platform_device *pdev)
|
||||
{
|
||||
if (is_mt76x8())
|
||||
return rt2880_pinmux_init(pdev, mt7628an_pinmux_data);
|
||||
return ralink_pinctrl_init(pdev, mt76x8_pinmux_data);
|
||||
else
|
||||
return rt2880_pinmux_init(pdev, mt7620a_pinmux_data);
|
||||
return ralink_pinctrl_init(pdev, mt7620a_pinmux_data);
|
||||
}
|
||||
|
||||
static const struct of_device_id mt7620_pinmux_match[] = {
|
||||
{ .compatible = "ralink,rt2880-pinmux" },
|
||||
static const struct of_device_id mt7620_pinctrl_match[] = {
|
||||
{ .compatible = "ralink,mt7620-pinctrl" },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, mt7620_pinmux_match);
|
||||
MODULE_DEVICE_TABLE(of, mt7620_pinctrl_match);
|
||||
|
||||
static struct platform_driver mt7620_pinmux_driver = {
|
||||
.probe = mt7620_pinmux_probe,
|
||||
static struct platform_driver mt7620_pinctrl_driver = {
|
||||
.probe = mt7620_pinctrl_probe,
|
||||
.driver = {
|
||||
.name = "rt2880-pinmux",
|
||||
.of_match_table = mt7620_pinmux_match,
|
||||
.name = "mt7620-pinctrl",
|
||||
.of_match_table = mt7620_pinctrl_match,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init mt7620_pinmux_init(void)
|
||||
static int __init mt7620_pinctrl_init(void)
|
||||
{
|
||||
return platform_driver_register(&mt7620_pinmux_driver);
|
||||
return platform_driver_register(&mt7620_pinctrl_driver);
|
||||
}
|
||||
core_initcall_sync(mt7620_pinmux_init);
|
||||
core_initcall_sync(mt7620_pinctrl_init);
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/of.h>
|
||||
#include "pinmux.h"
|
||||
#include "pinctrl-ralink.h"
|
||||
|
||||
#define MT7621_GPIO_MODE_UART1 1
|
||||
#define MT7621_GPIO_MODE_I2C 2
|
||||
@ -34,83 +34,83 @@
|
||||
#define MT7621_GPIO_MODE_SDHCI_SHIFT 18
|
||||
#define MT7621_GPIO_MODE_SDHCI_GPIO 1
|
||||
|
||||
static struct rt2880_pmx_func uart1_grp[] = { FUNC("uart1", 0, 1, 2) };
|
||||
static struct rt2880_pmx_func i2c_grp[] = { FUNC("i2c", 0, 3, 2) };
|
||||
static struct rt2880_pmx_func uart3_grp[] = {
|
||||
static struct ralink_pmx_func uart1_func[] = { FUNC("uart1", 0, 1, 2) };
|
||||
static struct ralink_pmx_func i2c_func[] = { FUNC("i2c", 0, 3, 2) };
|
||||
static struct ralink_pmx_func uart3_func[] = {
|
||||
FUNC("uart3", 0, 5, 4),
|
||||
FUNC("i2s", 2, 5, 4),
|
||||
FUNC("spdif3", 3, 5, 4),
|
||||
};
|
||||
static struct rt2880_pmx_func uart2_grp[] = {
|
||||
static struct ralink_pmx_func uart2_func[] = {
|
||||
FUNC("uart2", 0, 9, 4),
|
||||
FUNC("pcm", 2, 9, 4),
|
||||
FUNC("spdif2", 3, 9, 4),
|
||||
};
|
||||
static struct rt2880_pmx_func jtag_grp[] = { FUNC("jtag", 0, 13, 5) };
|
||||
static struct rt2880_pmx_func wdt_grp[] = {
|
||||
static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 13, 5) };
|
||||
static struct ralink_pmx_func wdt_func[] = {
|
||||
FUNC("wdt rst", 0, 18, 1),
|
||||
FUNC("wdt refclk", 2, 18, 1),
|
||||
};
|
||||
static struct rt2880_pmx_func pcie_rst_grp[] = {
|
||||
static struct ralink_pmx_func pcie_rst_func[] = {
|
||||
FUNC("pcie rst", MT7621_GPIO_MODE_PCIE_RST, 19, 1),
|
||||
FUNC("pcie refclk", MT7621_GPIO_MODE_PCIE_REF, 19, 1)
|
||||
};
|
||||
static struct rt2880_pmx_func mdio_grp[] = { FUNC("mdio", 0, 20, 2) };
|
||||
static struct rt2880_pmx_func rgmii2_grp[] = { FUNC("rgmii2", 0, 22, 12) };
|
||||
static struct rt2880_pmx_func spi_grp[] = {
|
||||
static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 20, 2) };
|
||||
static struct ralink_pmx_func rgmii2_func[] = { FUNC("rgmii2", 0, 22, 12) };
|
||||
static struct ralink_pmx_func spi_func[] = {
|
||||
FUNC("spi", 0, 34, 7),
|
||||
FUNC("nand1", 2, 34, 7),
|
||||
};
|
||||
static struct rt2880_pmx_func sdhci_grp[] = {
|
||||
static struct ralink_pmx_func sdhci_func[] = {
|
||||
FUNC("sdhci", 0, 41, 8),
|
||||
FUNC("nand2", 2, 41, 8),
|
||||
};
|
||||
static struct rt2880_pmx_func rgmii1_grp[] = { FUNC("rgmii1", 0, 49, 12) };
|
||||
static struct ralink_pmx_func rgmii1_func[] = { FUNC("rgmii1", 0, 49, 12) };
|
||||
|
||||
static struct rt2880_pmx_group mt7621_pinmux_data[] = {
|
||||
GRP("uart1", uart1_grp, 1, MT7621_GPIO_MODE_UART1),
|
||||
GRP("i2c", i2c_grp, 1, MT7621_GPIO_MODE_I2C),
|
||||
GRP_G("uart3", uart3_grp, MT7621_GPIO_MODE_UART3_MASK,
|
||||
static struct ralink_pmx_group mt7621_pinmux_data[] = {
|
||||
GRP("uart1", uart1_func, 1, MT7621_GPIO_MODE_UART1),
|
||||
GRP("i2c", i2c_func, 1, MT7621_GPIO_MODE_I2C),
|
||||
GRP_G("uart3", uart3_func, MT7621_GPIO_MODE_UART3_MASK,
|
||||
MT7621_GPIO_MODE_UART3_GPIO, MT7621_GPIO_MODE_UART3_SHIFT),
|
||||
GRP_G("uart2", uart2_grp, MT7621_GPIO_MODE_UART2_MASK,
|
||||
GRP_G("uart2", uart2_func, MT7621_GPIO_MODE_UART2_MASK,
|
||||
MT7621_GPIO_MODE_UART2_GPIO, MT7621_GPIO_MODE_UART2_SHIFT),
|
||||
GRP("jtag", jtag_grp, 1, MT7621_GPIO_MODE_JTAG),
|
||||
GRP_G("wdt", wdt_grp, MT7621_GPIO_MODE_WDT_MASK,
|
||||
GRP("jtag", jtag_func, 1, MT7621_GPIO_MODE_JTAG),
|
||||
GRP_G("wdt", wdt_func, MT7621_GPIO_MODE_WDT_MASK,
|
||||
MT7621_GPIO_MODE_WDT_GPIO, MT7621_GPIO_MODE_WDT_SHIFT),
|
||||
GRP_G("pcie", pcie_rst_grp, MT7621_GPIO_MODE_PCIE_MASK,
|
||||
GRP_G("pcie", pcie_rst_func, MT7621_GPIO_MODE_PCIE_MASK,
|
||||
MT7621_GPIO_MODE_PCIE_GPIO, MT7621_GPIO_MODE_PCIE_SHIFT),
|
||||
GRP_G("mdio", mdio_grp, MT7621_GPIO_MODE_MDIO_MASK,
|
||||
GRP_G("mdio", mdio_func, MT7621_GPIO_MODE_MDIO_MASK,
|
||||
MT7621_GPIO_MODE_MDIO_GPIO, MT7621_GPIO_MODE_MDIO_SHIFT),
|
||||
GRP("rgmii2", rgmii2_grp, 1, MT7621_GPIO_MODE_RGMII2),
|
||||
GRP_G("spi", spi_grp, MT7621_GPIO_MODE_SPI_MASK,
|
||||
GRP("rgmii2", rgmii2_func, 1, MT7621_GPIO_MODE_RGMII2),
|
||||
GRP_G("spi", spi_func, MT7621_GPIO_MODE_SPI_MASK,
|
||||
MT7621_GPIO_MODE_SPI_GPIO, MT7621_GPIO_MODE_SPI_SHIFT),
|
||||
GRP_G("sdhci", sdhci_grp, MT7621_GPIO_MODE_SDHCI_MASK,
|
||||
GRP_G("sdhci", sdhci_func, MT7621_GPIO_MODE_SDHCI_MASK,
|
||||
MT7621_GPIO_MODE_SDHCI_GPIO, MT7621_GPIO_MODE_SDHCI_SHIFT),
|
||||
GRP("rgmii1", rgmii1_grp, 1, MT7621_GPIO_MODE_RGMII1),
|
||||
GRP("rgmii1", rgmii1_func, 1, MT7621_GPIO_MODE_RGMII1),
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static int mt7621_pinmux_probe(struct platform_device *pdev)
|
||||
static int mt7621_pinctrl_probe(struct platform_device *pdev)
|
||||
{
|
||||
return rt2880_pinmux_init(pdev, mt7621_pinmux_data);
|
||||
return ralink_pinctrl_init(pdev, mt7621_pinmux_data);
|
||||
}
|
||||
|
||||
static const struct of_device_id mt7621_pinmux_match[] = {
|
||||
{ .compatible = "ralink,rt2880-pinmux" },
|
||||
static const struct of_device_id mt7621_pinctrl_match[] = {
|
||||
{ .compatible = "ralink,mt7621-pinctrl" },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, mt7621_pinmux_match);
|
||||
MODULE_DEVICE_TABLE(of, mt7621_pinctrl_match);
|
||||
|
||||
static struct platform_driver mt7621_pinmux_driver = {
|
||||
.probe = mt7621_pinmux_probe,
|
||||
static struct platform_driver mt7621_pinctrl_driver = {
|
||||
.probe = mt7621_pinctrl_probe,
|
||||
.driver = {
|
||||
.name = "rt2880-pinmux",
|
||||
.of_match_table = mt7621_pinmux_match,
|
||||
.name = "mt7621-pinctrl",
|
||||
.of_match_table = mt7621_pinctrl_match,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init mt7621_pinmux_init(void)
|
||||
static int __init mt7621_pinctrl_init(void)
|
||||
{
|
||||
return platform_driver_register(&mt7621_pinmux_driver);
|
||||
return platform_driver_register(&mt7621_pinctrl_driver);
|
||||
}
|
||||
core_initcall_sync(mt7621_pinmux_init);
|
||||
core_initcall_sync(mt7621_pinctrl_init);
|
||||
|
@ -1,349 +1,60 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (C) 2013 John Crispin <blogic@openwrt.org>
|
||||
*/
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/pinctrl/pinconf.h>
|
||||
#include <linux/pinctrl/pinconf-generic.h>
|
||||
#include <linux/pinctrl/pinmux.h>
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
#include <linux/pinctrl/machine.h>
|
||||
#include "pinctrl-ralink.h"
|
||||
|
||||
#include <asm/mach-ralink/ralink_regs.h>
|
||||
#include <asm/mach-ralink/mt7620.h>
|
||||
#define RT2880_GPIO_MODE_I2C BIT(0)
|
||||
#define RT2880_GPIO_MODE_UART0 BIT(1)
|
||||
#define RT2880_GPIO_MODE_SPI BIT(2)
|
||||
#define RT2880_GPIO_MODE_UART1 BIT(3)
|
||||
#define RT2880_GPIO_MODE_JTAG BIT(4)
|
||||
#define RT2880_GPIO_MODE_MDIO BIT(5)
|
||||
#define RT2880_GPIO_MODE_SDRAM BIT(6)
|
||||
#define RT2880_GPIO_MODE_PCI BIT(7)
|
||||
|
||||
#include "pinmux.h"
|
||||
#include "../core.h"
|
||||
#include "../pinctrl-utils.h"
|
||||
static struct ralink_pmx_func i2c_func[] = { FUNC("i2c", 0, 1, 2) };
|
||||
static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
|
||||
static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 7, 8) };
|
||||
static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
|
||||
static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
|
||||
static struct ralink_pmx_func sdram_func[] = { FUNC("sdram", 0, 24, 16) };
|
||||
static struct ralink_pmx_func pci_func[] = { FUNC("pci", 0, 40, 32) };
|
||||
|
||||
#define SYSC_REG_GPIO_MODE 0x60
|
||||
#define SYSC_REG_GPIO_MODE2 0x64
|
||||
|
||||
struct rt2880_priv {
|
||||
struct device *dev;
|
||||
|
||||
struct pinctrl_pin_desc *pads;
|
||||
struct pinctrl_desc *desc;
|
||||
|
||||
struct rt2880_pmx_func **func;
|
||||
int func_count;
|
||||
|
||||
struct rt2880_pmx_group *groups;
|
||||
const char **group_names;
|
||||
int group_count;
|
||||
|
||||
u8 *gpio;
|
||||
int max_pins;
|
||||
static struct ralink_pmx_group rt2880_pinmux_data_act[] = {
|
||||
GRP("i2c", i2c_func, 1, RT2880_GPIO_MODE_I2C),
|
||||
GRP("spi", spi_func, 1, RT2880_GPIO_MODE_SPI),
|
||||
GRP("uartlite", uartlite_func, 1, RT2880_GPIO_MODE_UART0),
|
||||
GRP("jtag", jtag_func, 1, RT2880_GPIO_MODE_JTAG),
|
||||
GRP("mdio", mdio_func, 1, RT2880_GPIO_MODE_MDIO),
|
||||
GRP("sdram", sdram_func, 1, RT2880_GPIO_MODE_SDRAM),
|
||||
GRP("pci", pci_func, 1, RT2880_GPIO_MODE_PCI),
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static int rt2880_get_group_count(struct pinctrl_dev *pctrldev)
|
||||
static int rt2880_pinctrl_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
|
||||
|
||||
return p->group_count;
|
||||
return ralink_pinctrl_init(pdev, rt2880_pinmux_data_act);
|
||||
}
|
||||
|
||||
static const char *rt2880_get_group_name(struct pinctrl_dev *pctrldev,
|
||||
unsigned int group)
|
||||
{
|
||||
struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
|
||||
static const struct of_device_id rt2880_pinctrl_match[] = {
|
||||
{ .compatible = "ralink,rt2880-pinctrl" },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, rt2880_pinctrl_match);
|
||||
|
||||
return (group >= p->group_count) ? NULL : p->group_names[group];
|
||||
}
|
||||
|
||||
static int rt2880_get_group_pins(struct pinctrl_dev *pctrldev,
|
||||
unsigned int group,
|
||||
const unsigned int **pins,
|
||||
unsigned int *num_pins)
|
||||
{
|
||||
struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
|
||||
|
||||
if (group >= p->group_count)
|
||||
return -EINVAL;
|
||||
|
||||
*pins = p->groups[group].func[0].pins;
|
||||
*num_pins = p->groups[group].func[0].pin_count;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct pinctrl_ops rt2880_pctrl_ops = {
|
||||
.get_groups_count = rt2880_get_group_count,
|
||||
.get_group_name = rt2880_get_group_name,
|
||||
.get_group_pins = rt2880_get_group_pins,
|
||||
.dt_node_to_map = pinconf_generic_dt_node_to_map_all,
|
||||
.dt_free_map = pinconf_generic_dt_free_map,
|
||||
static struct platform_driver rt2880_pinctrl_driver = {
|
||||
.probe = rt2880_pinctrl_probe,
|
||||
.driver = {
|
||||
.name = "rt2880-pinctrl",
|
||||
.of_match_table = rt2880_pinctrl_match,
|
||||
},
|
||||
};
|
||||
|
||||
static int rt2880_pmx_func_count(struct pinctrl_dev *pctrldev)
|
||||
static int __init rt2880_pinctrl_init(void)
|
||||
{
|
||||
struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
|
||||
|
||||
return p->func_count;
|
||||
}
|
||||
|
||||
static const char *rt2880_pmx_func_name(struct pinctrl_dev *pctrldev,
|
||||
unsigned int func)
|
||||
{
|
||||
struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
|
||||
|
||||
return p->func[func]->name;
|
||||
}
|
||||
|
||||
static int rt2880_pmx_group_get_groups(struct pinctrl_dev *pctrldev,
|
||||
unsigned int func,
|
||||
const char * const **groups,
|
||||
unsigned int * const num_groups)
|
||||
{
|
||||
struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
|
||||
|
||||
if (p->func[func]->group_count == 1)
|
||||
*groups = &p->group_names[p->func[func]->groups[0]];
|
||||
else
|
||||
*groups = p->group_names;
|
||||
|
||||
*num_groups = p->func[func]->group_count;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rt2880_pmx_group_enable(struct pinctrl_dev *pctrldev,
|
||||
unsigned int func, unsigned int group)
|
||||
{
|
||||
struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
|
||||
u32 mode = 0;
|
||||
u32 reg = SYSC_REG_GPIO_MODE;
|
||||
int i;
|
||||
int shift;
|
||||
|
||||
/* dont allow double use */
|
||||
if (p->groups[group].enabled) {
|
||||
dev_err(p->dev, "%s is already enabled\n",
|
||||
p->groups[group].name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
p->groups[group].enabled = 1;
|
||||
p->func[func]->enabled = 1;
|
||||
|
||||
shift = p->groups[group].shift;
|
||||
if (shift >= 32) {
|
||||
shift -= 32;
|
||||
reg = SYSC_REG_GPIO_MODE2;
|
||||
}
|
||||
mode = rt_sysc_r32(reg);
|
||||
mode &= ~(p->groups[group].mask << shift);
|
||||
|
||||
/* mark the pins as gpio */
|
||||
for (i = 0; i < p->groups[group].func[0].pin_count; i++)
|
||||
p->gpio[p->groups[group].func[0].pins[i]] = 1;
|
||||
|
||||
/* function 0 is gpio and needs special handling */
|
||||
if (func == 0) {
|
||||
mode |= p->groups[group].gpio << shift;
|
||||
} else {
|
||||
for (i = 0; i < p->func[func]->pin_count; i++)
|
||||
p->gpio[p->func[func]->pins[i]] = 0;
|
||||
mode |= p->func[func]->value << shift;
|
||||
}
|
||||
rt_sysc_w32(mode, reg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rt2880_pmx_group_gpio_request_enable(struct pinctrl_dev *pctrldev,
|
||||
struct pinctrl_gpio_range *range,
|
||||
unsigned int pin)
|
||||
{
|
||||
struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
|
||||
|
||||
if (!p->gpio[pin]) {
|
||||
dev_err(p->dev, "pin %d is not set to gpio mux\n", pin);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct pinmux_ops rt2880_pmx_group_ops = {
|
||||
.get_functions_count = rt2880_pmx_func_count,
|
||||
.get_function_name = rt2880_pmx_func_name,
|
||||
.get_function_groups = rt2880_pmx_group_get_groups,
|
||||
.set_mux = rt2880_pmx_group_enable,
|
||||
.gpio_request_enable = rt2880_pmx_group_gpio_request_enable,
|
||||
};
|
||||
|
||||
static struct pinctrl_desc rt2880_pctrl_desc = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "rt2880-pinmux",
|
||||
.pctlops = &rt2880_pctrl_ops,
|
||||
.pmxops = &rt2880_pmx_group_ops,
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_func gpio_func = {
|
||||
.name = "gpio",
|
||||
};
|
||||
|
||||
static int rt2880_pinmux_index(struct rt2880_priv *p)
|
||||
{
|
||||
struct rt2880_pmx_group *mux = p->groups;
|
||||
int i, j, c = 0;
|
||||
|
||||
/* count the mux functions */
|
||||
while (mux->name) {
|
||||
p->group_count++;
|
||||
mux++;
|
||||
}
|
||||
|
||||
/* allocate the group names array needed by the gpio function */
|
||||
p->group_names = devm_kcalloc(p->dev, p->group_count,
|
||||
sizeof(char *), GFP_KERNEL);
|
||||
if (!p->group_names)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < p->group_count; i++) {
|
||||
p->group_names[i] = p->groups[i].name;
|
||||
p->func_count += p->groups[i].func_count;
|
||||
}
|
||||
|
||||
/* we have a dummy function[0] for gpio */
|
||||
p->func_count++;
|
||||
|
||||
/* allocate our function and group mapping index buffers */
|
||||
p->func = devm_kcalloc(p->dev, p->func_count,
|
||||
sizeof(*p->func), GFP_KERNEL);
|
||||
gpio_func.groups = devm_kcalloc(p->dev, p->group_count, sizeof(int),
|
||||
GFP_KERNEL);
|
||||
if (!p->func || !gpio_func.groups)
|
||||
return -ENOMEM;
|
||||
|
||||
/* add a backpointer to the function so it knows its group */
|
||||
gpio_func.group_count = p->group_count;
|
||||
for (i = 0; i < gpio_func.group_count; i++)
|
||||
gpio_func.groups[i] = i;
|
||||
|
||||
p->func[c] = &gpio_func;
|
||||
c++;
|
||||
|
||||
/* add remaining functions */
|
||||
for (i = 0; i < p->group_count; i++) {
|
||||
for (j = 0; j < p->groups[i].func_count; j++) {
|
||||
p->func[c] = &p->groups[i].func[j];
|
||||
p->func[c]->groups = devm_kzalloc(p->dev, sizeof(int),
|
||||
GFP_KERNEL);
|
||||
if (!p->func[c]->groups)
|
||||
return -ENOMEM;
|
||||
p->func[c]->groups[0] = i;
|
||||
p->func[c]->group_count = 1;
|
||||
c++;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rt2880_pinmux_pins(struct rt2880_priv *p)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
/*
|
||||
* loop over the functions and initialize the pins array.
|
||||
* also work out the highest pin used.
|
||||
*/
|
||||
for (i = 0; i < p->func_count; i++) {
|
||||
int pin;
|
||||
|
||||
if (!p->func[i]->pin_count)
|
||||
continue;
|
||||
|
||||
p->func[i]->pins = devm_kcalloc(p->dev,
|
||||
p->func[i]->pin_count,
|
||||
sizeof(int),
|
||||
GFP_KERNEL);
|
||||
for (j = 0; j < p->func[i]->pin_count; j++)
|
||||
p->func[i]->pins[j] = p->func[i]->pin_first + j;
|
||||
|
||||
pin = p->func[i]->pin_first + p->func[i]->pin_count;
|
||||
if (pin > p->max_pins)
|
||||
p->max_pins = pin;
|
||||
}
|
||||
|
||||
/* the buffer that tells us which pins are gpio */
|
||||
p->gpio = devm_kcalloc(p->dev, p->max_pins, sizeof(u8), GFP_KERNEL);
|
||||
/* the pads needed to tell pinctrl about our pins */
|
||||
p->pads = devm_kcalloc(p->dev, p->max_pins,
|
||||
sizeof(struct pinctrl_pin_desc), GFP_KERNEL);
|
||||
if (!p->pads || !p->gpio)
|
||||
return -ENOMEM;
|
||||
|
||||
memset(p->gpio, 1, sizeof(u8) * p->max_pins);
|
||||
for (i = 0; i < p->func_count; i++) {
|
||||
if (!p->func[i]->pin_count)
|
||||
continue;
|
||||
|
||||
for (j = 0; j < p->func[i]->pin_count; j++)
|
||||
p->gpio[p->func[i]->pins[j]] = 0;
|
||||
}
|
||||
|
||||
/* pin 0 is always a gpio */
|
||||
p->gpio[0] = 1;
|
||||
|
||||
/* set the pads */
|
||||
for (i = 0; i < p->max_pins; i++) {
|
||||
/* strlen("ioXY") + 1 = 5 */
|
||||
char *name = devm_kzalloc(p->dev, 5, GFP_KERNEL);
|
||||
|
||||
if (!name)
|
||||
return -ENOMEM;
|
||||
snprintf(name, 5, "io%d", i);
|
||||
p->pads[i].number = i;
|
||||
p->pads[i].name = name;
|
||||
}
|
||||
p->desc->pins = p->pads;
|
||||
p->desc->npins = p->max_pins;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rt2880_pinmux_init(struct platform_device *pdev,
|
||||
struct rt2880_pmx_group *data)
|
||||
{
|
||||
struct rt2880_priv *p;
|
||||
struct pinctrl_dev *dev;
|
||||
int err;
|
||||
|
||||
if (!data)
|
||||
return -ENOTSUPP;
|
||||
|
||||
/* setup the private data */
|
||||
p = devm_kzalloc(&pdev->dev, sizeof(struct rt2880_priv), GFP_KERNEL);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
|
||||
p->dev = &pdev->dev;
|
||||
p->desc = &rt2880_pctrl_desc;
|
||||
p->groups = data;
|
||||
platform_set_drvdata(pdev, p);
|
||||
|
||||
/* init the device */
|
||||
err = rt2880_pinmux_index(p);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "failed to load index\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
err = rt2880_pinmux_pins(p);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "failed to load pins\n");
|
||||
return err;
|
||||
}
|
||||
dev = pinctrl_register(p->desc, &pdev->dev, p);
|
||||
|
||||
return PTR_ERR_OR_ZERO(dev);
|
||||
return platform_driver_register(&rt2880_pinctrl_driver);
|
||||
}
|
||||
core_initcall_sync(rt2880_pinctrl_init);
|
||||
|
@ -5,7 +5,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/of.h>
|
||||
#include "pinmux.h"
|
||||
#include "pinctrl-ralink.h"
|
||||
|
||||
#define RT305X_GPIO_MODE_UART0_SHIFT 2
|
||||
#define RT305X_GPIO_MODE_UART0_MASK 0x7
|
||||
@ -31,9 +31,9 @@
|
||||
#define RT3352_GPIO_MODE_LNA 18
|
||||
#define RT3352_GPIO_MODE_PA 20
|
||||
|
||||
static struct rt2880_pmx_func i2c_func[] = { FUNC("i2c", 0, 1, 2) };
|
||||
static struct rt2880_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
|
||||
static struct rt2880_pmx_func uartf_func[] = {
|
||||
static struct ralink_pmx_func i2c_func[] = { FUNC("i2c", 0, 1, 2) };
|
||||
static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
|
||||
static struct ralink_pmx_func uartf_func[] = {
|
||||
FUNC("uartf", RT305X_GPIO_MODE_UARTF, 7, 8),
|
||||
FUNC("pcm uartf", RT305X_GPIO_MODE_PCM_UARTF, 7, 8),
|
||||
FUNC("pcm i2s", RT305X_GPIO_MODE_PCM_I2S, 7, 8),
|
||||
@ -42,28 +42,28 @@ static struct rt2880_pmx_func uartf_func[] = {
|
||||
FUNC("gpio uartf", RT305X_GPIO_MODE_GPIO_UARTF, 7, 4),
|
||||
FUNC("gpio i2s", RT305X_GPIO_MODE_GPIO_I2S, 7, 4),
|
||||
};
|
||||
static struct rt2880_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
|
||||
static struct rt2880_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
|
||||
static struct rt2880_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
|
||||
static struct rt2880_pmx_func rt5350_led_func[] = { FUNC("led", 0, 22, 5) };
|
||||
static struct rt2880_pmx_func rt5350_cs1_func[] = {
|
||||
static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
|
||||
static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
|
||||
static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
|
||||
static struct ralink_pmx_func rt5350_led_func[] = { FUNC("led", 0, 22, 5) };
|
||||
static struct ralink_pmx_func rt5350_cs1_func[] = {
|
||||
FUNC("spi_cs1", 0, 27, 1),
|
||||
FUNC("wdg_cs1", 1, 27, 1),
|
||||
};
|
||||
static struct rt2880_pmx_func sdram_func[] = { FUNC("sdram", 0, 24, 16) };
|
||||
static struct rt2880_pmx_func rt3352_rgmii_func[] = {
|
||||
static struct ralink_pmx_func sdram_func[] = { FUNC("sdram", 0, 24, 16) };
|
||||
static struct ralink_pmx_func rt3352_rgmii_func[] = {
|
||||
FUNC("rgmii", 0, 24, 12)
|
||||
};
|
||||
static struct rt2880_pmx_func rgmii_func[] = { FUNC("rgmii", 0, 40, 12) };
|
||||
static struct rt2880_pmx_func rt3352_lna_func[] = { FUNC("lna", 0, 36, 2) };
|
||||
static struct rt2880_pmx_func rt3352_pa_func[] = { FUNC("pa", 0, 38, 2) };
|
||||
static struct rt2880_pmx_func rt3352_led_func[] = { FUNC("led", 0, 40, 5) };
|
||||
static struct rt2880_pmx_func rt3352_cs1_func[] = {
|
||||
static struct ralink_pmx_func rgmii_func[] = { FUNC("rgmii", 0, 40, 12) };
|
||||
static struct ralink_pmx_func rt3352_lna_func[] = { FUNC("lna", 0, 36, 2) };
|
||||
static struct ralink_pmx_func rt3352_pa_func[] = { FUNC("pa", 0, 38, 2) };
|
||||
static struct ralink_pmx_func rt3352_led_func[] = { FUNC("led", 0, 40, 5) };
|
||||
static struct ralink_pmx_func rt3352_cs1_func[] = {
|
||||
FUNC("spi_cs1", 0, 45, 1),
|
||||
FUNC("wdg_cs1", 1, 45, 1),
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_group rt3050_pinmux_data[] = {
|
||||
static struct ralink_pmx_group rt3050_pinmux_data[] = {
|
||||
GRP("i2c", i2c_func, 1, RT305X_GPIO_MODE_I2C),
|
||||
GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI),
|
||||
GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK,
|
||||
@ -76,7 +76,7 @@ static struct rt2880_pmx_group rt3050_pinmux_data[] = {
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_group rt3352_pinmux_data[] = {
|
||||
static struct ralink_pmx_group rt3352_pinmux_data[] = {
|
||||
GRP("i2c", i2c_func, 1, RT305X_GPIO_MODE_I2C),
|
||||
GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI),
|
||||
GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK,
|
||||
@ -92,7 +92,7 @@ static struct rt2880_pmx_group rt3352_pinmux_data[] = {
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static struct rt2880_pmx_group rt5350_pinmux_data[] = {
|
||||
static struct ralink_pmx_group rt5350_pinmux_data[] = {
|
||||
GRP("i2c", i2c_func, 1, RT305X_GPIO_MODE_I2C),
|
||||
GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI),
|
||||
GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK,
|
||||
@ -104,34 +104,34 @@ static struct rt2880_pmx_group rt5350_pinmux_data[] = {
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static int rt305x_pinmux_probe(struct platform_device *pdev)
|
||||
static int rt305x_pinctrl_probe(struct platform_device *pdev)
|
||||
{
|
||||
if (soc_is_rt5350())
|
||||
return rt2880_pinmux_init(pdev, rt5350_pinmux_data);
|
||||
return ralink_pinctrl_init(pdev, rt5350_pinmux_data);
|
||||
else if (soc_is_rt305x() || soc_is_rt3350())
|
||||
return rt2880_pinmux_init(pdev, rt3050_pinmux_data);
|
||||
return ralink_pinctrl_init(pdev, rt3050_pinmux_data);
|
||||
else if (soc_is_rt3352())
|
||||
return rt2880_pinmux_init(pdev, rt3352_pinmux_data);
|
||||
return ralink_pinctrl_init(pdev, rt3352_pinmux_data);
|
||||
else
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static const struct of_device_id rt305x_pinmux_match[] = {
|
||||
{ .compatible = "ralink,rt2880-pinmux" },
|
||||
static const struct of_device_id rt305x_pinctrl_match[] = {
|
||||
{ .compatible = "ralink,rt305x-pinctrl" },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, rt305x_pinmux_match);
|
||||
MODULE_DEVICE_TABLE(of, rt305x_pinctrl_match);
|
||||
|
||||
static struct platform_driver rt305x_pinmux_driver = {
|
||||
.probe = rt305x_pinmux_probe,
|
||||
static struct platform_driver rt305x_pinctrl_driver = {
|
||||
.probe = rt305x_pinctrl_probe,
|
||||
.driver = {
|
||||
.name = "rt2880-pinmux",
|
||||
.of_match_table = rt305x_pinmux_match,
|
||||
.name = "rt305x-pinctrl",
|
||||
.of_match_table = rt305x_pinctrl_match,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init rt305x_pinmux_init(void)
|
||||
static int __init rt305x_pinctrl_init(void)
|
||||
{
|
||||
return platform_driver_register(&rt305x_pinmux_driver);
|
||||
return platform_driver_register(&rt305x_pinctrl_driver);
|
||||
}
|
||||
core_initcall_sync(rt305x_pinmux_init);
|
||||
core_initcall_sync(rt305x_pinctrl_init);
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/of.h>
|
||||
#include "pinmux.h"
|
||||
#include "pinctrl-ralink.h"
|
||||
|
||||
#define RT3883_GPIO_MODE_UART0_SHIFT 2
|
||||
#define RT3883_GPIO_MODE_UART0_MASK 0x7
|
||||
@ -39,9 +39,9 @@
|
||||
#define RT3883_GPIO_MODE_LNA_G_GPIO 0x3
|
||||
#define RT3883_GPIO_MODE_LNA_G _RT3883_GPIO_MODE_LNA_G(RT3883_GPIO_MODE_LNA_G_MASK)
|
||||
|
||||
static struct rt2880_pmx_func i2c_func[] = { FUNC("i2c", 0, 1, 2) };
|
||||
static struct rt2880_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
|
||||
static struct rt2880_pmx_func uartf_func[] = {
|
||||
static struct ralink_pmx_func i2c_func[] = { FUNC("i2c", 0, 1, 2) };
|
||||
static struct ralink_pmx_func spi_func[] = { FUNC("spi", 0, 3, 4) };
|
||||
static struct ralink_pmx_func uartf_func[] = {
|
||||
FUNC("uartf", RT3883_GPIO_MODE_UARTF, 7, 8),
|
||||
FUNC("pcm uartf", RT3883_GPIO_MODE_PCM_UARTF, 7, 8),
|
||||
FUNC("pcm i2s", RT3883_GPIO_MODE_PCM_I2S, 7, 8),
|
||||
@ -50,21 +50,21 @@ static struct rt2880_pmx_func uartf_func[] = {
|
||||
FUNC("gpio uartf", RT3883_GPIO_MODE_GPIO_UARTF, 7, 4),
|
||||
FUNC("gpio i2s", RT3883_GPIO_MODE_GPIO_I2S, 7, 4),
|
||||
};
|
||||
static struct rt2880_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
|
||||
static struct rt2880_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
|
||||
static struct rt2880_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
|
||||
static struct rt2880_pmx_func lna_a_func[] = { FUNC("lna a", 0, 32, 3) };
|
||||
static struct rt2880_pmx_func lna_g_func[] = { FUNC("lna g", 0, 35, 3) };
|
||||
static struct rt2880_pmx_func pci_func[] = {
|
||||
static struct ralink_pmx_func uartlite_func[] = { FUNC("uartlite", 0, 15, 2) };
|
||||
static struct ralink_pmx_func jtag_func[] = { FUNC("jtag", 0, 17, 5) };
|
||||
static struct ralink_pmx_func mdio_func[] = { FUNC("mdio", 0, 22, 2) };
|
||||
static struct ralink_pmx_func lna_a_func[] = { FUNC("lna a", 0, 32, 3) };
|
||||
static struct ralink_pmx_func lna_g_func[] = { FUNC("lna g", 0, 35, 3) };
|
||||
static struct ralink_pmx_func pci_func[] = {
|
||||
FUNC("pci-dev", 0, 40, 32),
|
||||
FUNC("pci-host2", 1, 40, 32),
|
||||
FUNC("pci-host1", 2, 40, 32),
|
||||
FUNC("pci-fnc", 3, 40, 32)
|
||||
};
|
||||
static struct rt2880_pmx_func ge1_func[] = { FUNC("ge1", 0, 72, 12) };
|
||||
static struct rt2880_pmx_func ge2_func[] = { FUNC("ge2", 0, 84, 12) };
|
||||
static struct ralink_pmx_func ge1_func[] = { FUNC("ge1", 0, 72, 12) };
|
||||
static struct ralink_pmx_func ge2_func[] = { FUNC("ge2", 0, 84, 12) };
|
||||
|
||||
static struct rt2880_pmx_group rt3883_pinmux_data[] = {
|
||||
static struct ralink_pmx_group rt3883_pinmux_data[] = {
|
||||
GRP("i2c", i2c_func, 1, RT3883_GPIO_MODE_I2C),
|
||||
GRP("spi", spi_func, 1, RT3883_GPIO_MODE_SPI),
|
||||
GRP("uartf", uartf_func, RT3883_GPIO_MODE_UART0_MASK,
|
||||
@ -81,27 +81,27 @@ static struct rt2880_pmx_group rt3883_pinmux_data[] = {
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static int rt3883_pinmux_probe(struct platform_device *pdev)
|
||||
static int rt3883_pinctrl_probe(struct platform_device *pdev)
|
||||
{
|
||||
return rt2880_pinmux_init(pdev, rt3883_pinmux_data);
|
||||
return ralink_pinctrl_init(pdev, rt3883_pinmux_data);
|
||||
}
|
||||
|
||||
static const struct of_device_id rt3883_pinmux_match[] = {
|
||||
{ .compatible = "ralink,rt2880-pinmux" },
|
||||
static const struct of_device_id rt3883_pinctrl_match[] = {
|
||||
{ .compatible = "ralink,rt3883-pinctrl" },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, rt3883_pinmux_match);
|
||||
MODULE_DEVICE_TABLE(of, rt3883_pinctrl_match);
|
||||
|
||||
static struct platform_driver rt3883_pinmux_driver = {
|
||||
.probe = rt3883_pinmux_probe,
|
||||
static struct platform_driver rt3883_pinctrl_driver = {
|
||||
.probe = rt3883_pinctrl_probe,
|
||||
.driver = {
|
||||
.name = "rt2880-pinmux",
|
||||
.of_match_table = rt3883_pinmux_match,
|
||||
.name = "rt3883-pinctrl",
|
||||
.of_match_table = rt3883_pinctrl_match,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init rt3883_pinmux_init(void)
|
||||
static int __init rt3883_pinctrl_init(void)
|
||||
{
|
||||
return platform_driver_register(&rt3883_pinmux_driver);
|
||||
return platform_driver_register(&rt3883_pinctrl_driver);
|
||||
}
|
||||
core_initcall_sync(rt3883_pinmux_init);
|
||||
core_initcall_sync(rt3883_pinctrl_init);
|
||||
|
@ -38,8 +38,9 @@ config PINCTRL_RENESAS
|
||||
select PINCTRL_PFC_R8A77995 if ARCH_R8A77995
|
||||
select PINCTRL_PFC_R8A779A0 if ARCH_R8A779A0
|
||||
select PINCTRL_PFC_R8A779F0 if ARCH_R8A779F0
|
||||
select PINCTRL_RZG2L if ARCH_R9A07G044
|
||||
select PINCTRL_RZG2L if ARCH_R9A07G054
|
||||
select PINCTRL_PFC_R8A779G0 if ARCH_R8A779G0
|
||||
select PINCTRL_RZG2L if ARCH_RZG2L
|
||||
select PINCTRL_RZV2M if ARCH_R9A09G011
|
||||
select PINCTRL_PFC_SH7203 if CPU_SUBTYPE_SH7203
|
||||
select PINCTRL_PFC_SH7264 if CPU_SUBTYPE_SH7264
|
||||
select PINCTRL_PFC_SH7269 if CPU_SUBTYPE_SH7269
|
||||
@ -154,6 +155,10 @@ config PINCTRL_PFC_R8A779A0
|
||||
bool "pin control support for R-Car V3U" if COMPILE_TEST
|
||||
select PINCTRL_SH_PFC
|
||||
|
||||
config PINCTRL_PFC_R8A779G0
|
||||
bool "pin control support for R-Car V4H" if COMPILE_TEST
|
||||
select PINCTRL_SH_PFC
|
||||
|
||||
config PINCTRL_PFC_R8A7740
|
||||
bool "pin control support for R-Mobile A1" if COMPILE_TEST
|
||||
select PINCTRL_SH_PFC_GPIO
|
||||
@ -184,14 +189,14 @@ config PINCTRL_RZA2
|
||||
This selects GPIO and pinctrl driver for Renesas RZ/A2 platforms.
|
||||
|
||||
config PINCTRL_RZG2L
|
||||
bool "pin control support for RZ/{G2L,V2L}" if COMPILE_TEST
|
||||
bool "pin control support for RZ/{G2L,G2UL,V2L}" if COMPILE_TEST
|
||||
depends on OF
|
||||
select GPIOLIB
|
||||
select GENERIC_PINCTRL_GROUPS
|
||||
select GENERIC_PINMUX_FUNCTIONS
|
||||
select GENERIC_PINCONF
|
||||
help
|
||||
This selects GPIO and pinctrl driver for Renesas RZ/{G2L,V2L}
|
||||
This selects GPIO and pinctrl driver for Renesas RZ/{G2L,G2UL,V2L}
|
||||
platforms.
|
||||
|
||||
config PINCTRL_PFC_R8A77470
|
||||
@ -238,6 +243,18 @@ config PINCTRL_RZN1
|
||||
help
|
||||
This selects pinctrl driver for Renesas RZ/N1 devices.
|
||||
|
||||
config PINCTRL_RZV2M
|
||||
bool "pin control support for RZ/V2M"
|
||||
depends on OF
|
||||
depends on ARCH_R9A09G011 || COMPILE_TEST
|
||||
select GPIOLIB
|
||||
select GENERIC_PINCTRL_GROUPS
|
||||
select GENERIC_PINMUX_FUNCTIONS
|
||||
select GENERIC_PINCONF
|
||||
help
|
||||
This selects GPIO and pinctrl driver for Renesas RZ/V2M
|
||||
platforms.
|
||||
|
||||
config PINCTRL_PFC_SH7203
|
||||
bool "pin control support for SH7203" if COMPILE_TEST
|
||||
select PINCTRL_SH_FUNC_GPIO
|
||||
|
@ -31,6 +31,7 @@ obj-$(CONFIG_PINCTRL_PFC_R8A77990) += pfc-r8a77990.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_R8A77995) += pfc-r8a77995.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_R8A779A0) += pfc-r8a779a0.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_R8A779F0) += pfc-r8a779f0.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_R8A779G0) += pfc-r8a779g0.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_SH7203) += pfc-sh7203.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_SH7264) += pfc-sh7264.o
|
||||
obj-$(CONFIG_PINCTRL_PFC_SH7269) += pfc-sh7269.o
|
||||
@ -49,6 +50,7 @@ obj-$(CONFIG_PINCTRL_RZA1) += pinctrl-rza1.o
|
||||
obj-$(CONFIG_PINCTRL_RZA2) += pinctrl-rza2.o
|
||||
obj-$(CONFIG_PINCTRL_RZG2L) += pinctrl-rzg2l.o
|
||||
obj-$(CONFIG_PINCTRL_RZN1) += pinctrl-rzn1.o
|
||||
obj-$(CONFIG_PINCTRL_RZV2M) += pinctrl-rzv2m.o
|
||||
|
||||
ifeq ($(CONFIG_COMPILE_TEST),y)
|
||||
CFLAGS_pfc-sh7203.o += -I$(srctree)/arch/sh/include/cpu-sh2a
|
||||
|
@ -13,10 +13,11 @@
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/math.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/pinctrl/machine.h>
|
||||
@ -71,12 +72,11 @@ static int sh_pfc_map_resources(struct sh_pfc *pfc,
|
||||
|
||||
/* Fill them. */
|
||||
for (i = 0; i < num_windows; i++) {
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, i);
|
||||
windows->phys = res->start;
|
||||
windows->size = resource_size(res);
|
||||
windows->virt = devm_ioremap_resource(pfc->dev, res);
|
||||
windows->virt = devm_platform_get_and_ioremap_resource(pdev, i, &res);
|
||||
if (IS_ERR(windows->virt))
|
||||
return -ENOMEM;
|
||||
windows->phys = res->start;
|
||||
windows->size = resource_size(res);
|
||||
windows++;
|
||||
}
|
||||
for (i = 0; i < num_irqs; i++)
|
||||
@ -214,7 +214,7 @@ static void sh_pfc_config_reg_helper(struct sh_pfc *pfc,
|
||||
*maskp = (1 << crp->var_field_width[in_pos]) - 1;
|
||||
*posp = crp->reg_width;
|
||||
for (k = 0; k <= in_pos; k++)
|
||||
*posp -= crp->var_field_width[k];
|
||||
*posp -= abs(crp->var_field_width[k]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -262,14 +262,17 @@ static int sh_pfc_get_config_reg(struct sh_pfc *pfc, u16 enum_id,
|
||||
if (!r_width)
|
||||
break;
|
||||
|
||||
for (bit_pos = 0; bit_pos < r_width; bit_pos += curr_width) {
|
||||
for (bit_pos = 0; bit_pos < r_width; bit_pos += curr_width, m++) {
|
||||
u32 ncomb;
|
||||
u32 n;
|
||||
|
||||
if (f_width)
|
||||
if (f_width) {
|
||||
curr_width = f_width;
|
||||
else
|
||||
curr_width = config_reg->var_field_width[m];
|
||||
} else {
|
||||
curr_width = abs(config_reg->var_field_width[m]);
|
||||
if (config_reg->var_field_width[m] < 0)
|
||||
continue;
|
||||
}
|
||||
|
||||
ncomb = 1 << curr_width;
|
||||
for (n = 0; n < ncomb; n++) {
|
||||
@ -281,7 +284,6 @@ static int sh_pfc_get_config_reg(struct sh_pfc *pfc, u16 enum_id,
|
||||
}
|
||||
}
|
||||
pos += ncomb;
|
||||
m++;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
@ -642,6 +644,12 @@ static const struct of_device_id sh_pfc_of_table[] = {
|
||||
.data = &r8a779f0_pinmux_info,
|
||||
},
|
||||
#endif
|
||||
#ifdef CONFIG_PINCTRL_PFC_R8A779G0
|
||||
{
|
||||
.compatible = "renesas,pfc-r8a779g0",
|
||||
.data = &r8a779g0_pinmux_info,
|
||||
},
|
||||
#endif
|
||||
#ifdef CONFIG_PINCTRL_PFC_SH73A0
|
||||
{
|
||||
.compatible = "renesas,pfc-sh73a0",
|
||||
@ -875,7 +883,8 @@ static const struct sh_pfc_pin __init *sh_pfc_find_pin(
|
||||
static void __init sh_pfc_check_cfg_reg(const char *drvname,
|
||||
const struct pinmux_cfg_reg *cfg_reg)
|
||||
{
|
||||
unsigned int i, n, rw, fw;
|
||||
unsigned int i, n, rw, r;
|
||||
int fw;
|
||||
|
||||
sh_pfc_check_reg(drvname, cfg_reg->reg,
|
||||
GENMASK(cfg_reg->reg_width - 1, 0));
|
||||
@ -883,16 +892,29 @@ static void __init sh_pfc_check_cfg_reg(const char *drvname,
|
||||
if (cfg_reg->field_width) {
|
||||
fw = cfg_reg->field_width;
|
||||
n = (cfg_reg->reg_width / fw) << fw;
|
||||
for (i = 0, r = 0; i < n; i += 1 << fw) {
|
||||
if (is0s(&cfg_reg->enum_ids[i], 1 << fw))
|
||||
r++;
|
||||
}
|
||||
|
||||
if ((r << fw) * sizeof(u16) > cfg_reg->reg_width / fw)
|
||||
sh_pfc_warn("reg 0x%x can be described with variable-width reserved fields\n",
|
||||
cfg_reg->reg);
|
||||
|
||||
/* Skip field checks (done at build time) */
|
||||
goto check_enum_ids;
|
||||
}
|
||||
|
||||
for (i = 0, n = 0, rw = 0; (fw = cfg_reg->var_field_width[i]); i++) {
|
||||
if (fw > 3 && is0s(&cfg_reg->enum_ids[n], 1 << fw))
|
||||
sh_pfc_warn("reg 0x%x: reserved field [%u:%u] can be split to reduce table size\n",
|
||||
cfg_reg->reg, rw, rw + fw - 1);
|
||||
n += 1 << fw;
|
||||
rw += fw;
|
||||
if (fw < 0) {
|
||||
rw += -fw;
|
||||
} else {
|
||||
if (is0s(&cfg_reg->enum_ids[n], 1 << fw))
|
||||
sh_pfc_warn("reg 0x%x: field [%u:%u] can be described as reserved\n",
|
||||
cfg_reg->reg, rw, rw + fw - 1);
|
||||
n += 1 << fw;
|
||||
rw += fw;
|
||||
}
|
||||
}
|
||||
|
||||
if (rw != cfg_reg->reg_width)
|
||||
@ -1007,7 +1029,18 @@ static void __init sh_pfc_compare_groups(const char *drvname,
|
||||
static void __init sh_pfc_check_info(const struct sh_pfc_soc_info *info)
|
||||
{
|
||||
const struct pinmux_drive_reg *drive_regs = info->drive_regs;
|
||||
#define drive_nfields ARRAY_SIZE(drive_regs->fields)
|
||||
#define drive_ofs(i) drive_regs[(i) / drive_nfields]
|
||||
#define drive_reg(i) drive_ofs(i).reg
|
||||
#define drive_bit(i) ((i) % drive_nfields)
|
||||
#define drive_field(i) drive_ofs(i).fields[drive_bit(i)]
|
||||
const struct pinmux_bias_reg *bias_regs = info->bias_regs;
|
||||
#define bias_npins ARRAY_SIZE(bias_regs->pins)
|
||||
#define bias_ofs(i) bias_regs[(i) / bias_npins]
|
||||
#define bias_puen(i) bias_ofs(i).puen
|
||||
#define bias_pud(i) bias_ofs(i).pud
|
||||
#define bias_bit(i) ((i) % bias_npins)
|
||||
#define bias_pin(i) bias_ofs(i).pins[bias_bit(i)]
|
||||
const char *drvname = info->name;
|
||||
unsigned int *refcnts;
|
||||
unsigned int i, j, k;
|
||||
@ -1076,17 +1109,17 @@ static void __init sh_pfc_check_info(const struct sh_pfc_soc_info *info)
|
||||
if (!drive_regs) {
|
||||
sh_pfc_err_once(drive, "SH_PFC_PIN_CFG_DRIVE_STRENGTH flag set but drive_regs missing\n");
|
||||
} else {
|
||||
for (j = 0; drive_regs[j / 8].reg; j++) {
|
||||
if (!drive_regs[j / 8].fields[j % 8].pin &&
|
||||
!drive_regs[j / 8].fields[j % 8].offset &&
|
||||
!drive_regs[j / 8].fields[j % 8].size)
|
||||
for (j = 0; drive_reg(j); j++) {
|
||||
if (!drive_field(j).pin &&
|
||||
!drive_field(j).offset &&
|
||||
!drive_field(j).size)
|
||||
continue;
|
||||
|
||||
if (drive_regs[j / 8].fields[j % 8].pin == pin->pin)
|
||||
if (drive_field(j).pin == pin->pin)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!drive_regs[j / 8].reg)
|
||||
if (!drive_reg(j))
|
||||
sh_pfc_err("pin %s: SH_PFC_PIN_CFG_DRIVE_STRENGTH flag set but not in drive_regs\n",
|
||||
pin->name);
|
||||
}
|
||||
@ -1164,20 +1197,17 @@ static void __init sh_pfc_check_info(const struct sh_pfc_soc_info *info)
|
||||
for (i = 0; drive_regs && drive_regs[i].reg; i++)
|
||||
sh_pfc_check_drive_reg(info, &drive_regs[i]);
|
||||
|
||||
for (i = 0; drive_regs && drive_regs[i / 8].reg; i++) {
|
||||
if (!drive_regs[i / 8].fields[i % 8].pin &&
|
||||
!drive_regs[i / 8].fields[i % 8].offset &&
|
||||
!drive_regs[i / 8].fields[i % 8].size)
|
||||
for (i = 0; drive_regs && drive_reg(i); i++) {
|
||||
if (!drive_field(i).pin && !drive_field(i).offset &&
|
||||
!drive_field(i).size)
|
||||
continue;
|
||||
|
||||
for (j = 0; j < i; j++) {
|
||||
if (drive_regs[i / 8].fields[i % 8].pin ==
|
||||
drive_regs[j / 8].fields[j % 8].pin &&
|
||||
drive_regs[j / 8].fields[j % 8].offset &&
|
||||
drive_regs[j / 8].fields[j % 8].size) {
|
||||
sh_pfc_err("drive_reg 0x%x:%u/0x%x:%u: pin conflict\n",
|
||||
drive_regs[i / 8].reg, i % 8,
|
||||
drive_regs[j / 8].reg, j % 8);
|
||||
if (drive_field(i).pin == drive_field(j).pin &&
|
||||
drive_field(j).offset && drive_field(j).size) {
|
||||
sh_pfc_err("drive_reg 0x%x:%zu/0x%x:%zu: pin conflict\n",
|
||||
drive_reg(i), drive_bit(i),
|
||||
drive_reg(j), drive_bit(j));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1186,26 +1216,23 @@ static void __init sh_pfc_check_info(const struct sh_pfc_soc_info *info)
|
||||
for (i = 0; bias_regs && (bias_regs[i].puen || bias_regs[i].pud); i++)
|
||||
sh_pfc_check_bias_reg(info, &bias_regs[i]);
|
||||
|
||||
for (i = 0; bias_regs &&
|
||||
(bias_regs[i / 32].puen || bias_regs[i / 32].pud); i++) {
|
||||
if (bias_regs[i / 32].pins[i % 32] == SH_PFC_PIN_NONE)
|
||||
for (i = 0; bias_regs && (bias_puen(i) || bias_pud(i)); i++) {
|
||||
if (bias_pin(i) == SH_PFC_PIN_NONE)
|
||||
continue;
|
||||
|
||||
for (j = 0; j < i; j++) {
|
||||
if (bias_regs[i / 32].pins[i % 32] !=
|
||||
bias_regs[j / 32].pins[j % 32])
|
||||
if (bias_pin(i) != bias_pin(j))
|
||||
continue;
|
||||
|
||||
if (bias_regs[i / 32].puen && bias_regs[j / 32].puen)
|
||||
sh_pfc_err("bias_reg 0x%x:%u/0x%x:%u: pin conflict\n",
|
||||
bias_regs[i / 32].puen, i % 32,
|
||||
bias_regs[j / 32].puen, j % 32);
|
||||
if (bias_regs[i / 32].pud && bias_regs[j / 32].pud)
|
||||
sh_pfc_err("bias_reg 0x%x:%u/0x%x:%u: pin conflict\n",
|
||||
bias_regs[i / 32].pud, i % 32,
|
||||
bias_regs[j / 32].pud, j % 32);
|
||||
if (bias_puen(i) && bias_puen(j))
|
||||
sh_pfc_err("bias_reg 0x%x:%zu/0x%x:%zu: pin conflict\n",
|
||||
bias_puen(i), bias_bit(i),
|
||||
bias_puen(j), bias_bit(j));
|
||||
if (bias_pud(i) && bias_pud(j))
|
||||
sh_pfc_err("bias_reg 0x%x:%zu/0x%x:%zu: pin conflict\n",
|
||||
bias_pud(i), bias_bit(i),
|
||||
bias_pud(j), bias_bit(j));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Check ioctrl registers */
|
||||
|
@ -8,7 +8,6 @@
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
#include <linux/slab.h>
|
||||
|
@ -4,7 +4,6 @@
|
||||
*
|
||||
* Copyright (C) 2015 Niklas Söderlund
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
#include "sh_pfc.h"
|
||||
@ -1570,61 +1569,39 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("CHG_PINSEL_LCD3", 0xe0140284, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
|
||||
2, 2),
|
||||
GROUP(-20, 2, 2, -6, 2),
|
||||
GROUP(
|
||||
/* 31 - 12 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* 31 - 12 RESERVED */
|
||||
/* 11 - 10 */
|
||||
FN_SEL_LCD3_11_10_00, FN_SEL_LCD3_11_10_01,
|
||||
FN_SEL_LCD3_11_10_10, 0,
|
||||
/* 9 - 8 */
|
||||
FN_SEL_LCD3_9_8_00, 0, FN_SEL_LCD3_9_8_10, 0,
|
||||
/* 7 - 2 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* 7 - 2 RESERVED */
|
||||
/* 1 - 0 */
|
||||
FN_SEL_LCD3_1_0_00, FN_SEL_LCD3_1_0_01, 0, 0,
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("CHG_PINSEL_UART", 0xe0140288, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 2),
|
||||
GROUP(-30, 2),
|
||||
GROUP(
|
||||
/* 31 - 2 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* 31 - 2 RESERVED */
|
||||
/* 1 - 0 */
|
||||
FN_SEL_UART_1_0_00, FN_SEL_UART_1_0_01, 0, 0,
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("CHG_PINSEL_IIC", 0xe014028c, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 2),
|
||||
GROUP(-30, 2),
|
||||
GROUP(
|
||||
/* 31 - 2 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* 31 - 2 RESERVED */
|
||||
/* 1 - 0 */
|
||||
FN_SEL_IIC_1_0_00, FN_SEL_IIC_1_0_01, 0, 0,
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("CHG_PINSEL_AB", 0xe0140294, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(-18, 2, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* 31 - 14 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
/* 31 - 14 RESERVED */
|
||||
/* 13 - 12 */
|
||||
FN_SEL_AB_13_12_00, 0, FN_SEL_AB_13_12_10, 0,
|
||||
/* 11 - 10 */
|
||||
@ -1644,14 +1621,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("CHG_PINSEL_USI", 0xe0140298, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
|
||||
2, 2, 2),
|
||||
GROUP(-22, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* 31 - 10 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* 31 - 10 RESERVED */
|
||||
/* 9 - 8 */
|
||||
FN_SEL_USI_9_8_00, FN_SEL_USI_9_8_01, 0, 0,
|
||||
/* 7 - 6 */
|
||||
@ -1665,15 +1637,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("CHG_PINSEL_HSI", 0xe01402a8, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 2),
|
||||
GROUP(-30, 2),
|
||||
GROUP(
|
||||
/* 31 - 2 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* 31 - 2 RESERVED */
|
||||
/* 1 - 0 */
|
||||
FN_SEL_HSI_1_0_00, FN_SEL_HSI_1_0_01, 0, 0,
|
||||
))
|
||||
|
@ -2270,15 +2270,17 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MSEL1CR_00_0, MSEL1CR_00_1,
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG("MSEL3CR", 0xe6058020, 32, 1, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("MSEL3CR", 0xe6058020, 32,
|
||||
GROUP(1, -2, 1, 1, 1, -2, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, -2, 1, 1, 1, 1, -2, 1, -2, 1,
|
||||
-1, 1, 1),
|
||||
GROUP(
|
||||
MSEL3CR_31_0, MSEL3CR_31_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [2] */
|
||||
MSEL3CR_28_0, MSEL3CR_28_1,
|
||||
MSEL3CR_27_0, MSEL3CR_27_1,
|
||||
MSEL3CR_26_0, MSEL3CR_26_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [2] */
|
||||
MSEL3CR_23_0, MSEL3CR_23_1,
|
||||
MSEL3CR_22_0, MSEL3CR_22_1,
|
||||
MSEL3CR_21_0, MSEL3CR_21_1,
|
||||
@ -2288,19 +2290,16 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MSEL3CR_17_0, MSEL3CR_17_1,
|
||||
MSEL3CR_16_0, MSEL3CR_16_1,
|
||||
MSEL3CR_15_0, MSEL3CR_15_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [2] */
|
||||
MSEL3CR_12_0, MSEL3CR_12_1,
|
||||
MSEL3CR_11_0, MSEL3CR_11_1,
|
||||
MSEL3CR_10_0, MSEL3CR_10_1,
|
||||
MSEL3CR_09_0, MSEL3CR_09_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [2] */
|
||||
MSEL3CR_06_0, MSEL3CR_06_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [2] */
|
||||
MSEL3CR_03_0, MSEL3CR_03_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL3CR_01_0, MSEL3CR_01_1,
|
||||
MSEL3CR_00_0, MSEL3CR_00_1,
|
||||
))
|
||||
@ -2375,37 +2374,12 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0,
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG("MSEL8CR", 0xe6058034, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("MSEL8CR", 0xe6058034, 32,
|
||||
GROUP(-15, 1, -14, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [15] */
|
||||
MSEL8CR_16_0, MSEL8CR_16_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [14] */
|
||||
MSEL8CR_01_0, MSEL8CR_01_1,
|
||||
MSEL8CR_00_0, MSEL8CR_00_1,
|
||||
))
|
||||
|
@ -3250,89 +3250,93 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PORTCR(210, 0xe60530d2), /* PORT210CR */
|
||||
PORTCR(211, 0xe60530d3), /* PORT211CR */
|
||||
|
||||
{ PINMUX_CFG_REG("MSEL1CR", 0xe605800c, 32, 1, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("MSEL1CR", 0xe605800c, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, -9, 1, 1, 1, 1, 1,
|
||||
-2, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1),
|
||||
GROUP(
|
||||
MSEL1CR_31_0, MSEL1CR_31_1,
|
||||
MSEL1CR_30_0, MSEL1CR_30_1,
|
||||
MSEL1CR_29_0, MSEL1CR_29_1,
|
||||
MSEL1CR_28_0, MSEL1CR_28_1,
|
||||
MSEL1CR_27_0, MSEL1CR_27_1,
|
||||
MSEL1CR_26_0, MSEL1CR_26_1,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED [9] */
|
||||
MSEL1CR_16_0, MSEL1CR_16_1,
|
||||
MSEL1CR_15_0, MSEL1CR_15_1,
|
||||
MSEL1CR_14_0, MSEL1CR_14_1,
|
||||
MSEL1CR_13_0, MSEL1CR_13_1,
|
||||
MSEL1CR_12_0, MSEL1CR_12_1,
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
MSEL1CR_9_0, MSEL1CR_9_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL1CR_7_0, MSEL1CR_7_1,
|
||||
MSEL1CR_6_0, MSEL1CR_6_1,
|
||||
MSEL1CR_5_0, MSEL1CR_5_1,
|
||||
MSEL1CR_4_0, MSEL1CR_4_1,
|
||||
MSEL1CR_3_0, MSEL1CR_3_1,
|
||||
MSEL1CR_2_0, MSEL1CR_2_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL1CR_0_0, MSEL1CR_0_1,
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG("MSEL3CR", 0xE6058020, 32, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("MSEL3CR", 0xE6058020, 32,
|
||||
GROUP(-16, 1, -8, 1, -6),
|
||||
GROUP(
|
||||
/* RESERVED [16] */
|
||||
MSEL3CR_15_0, MSEL3CR_15_1,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED [8] */
|
||||
MSEL3CR_6_0, MSEL3CR_6_1,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [6] */
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG("MSEL4CR", 0xE6058024, 32, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("MSEL4CR", 0xE6058024, 32,
|
||||
GROUP(-12, 1, 1, -2, 1, -4, 1, -3, 1, -1, 1, -2,
|
||||
1, -1),
|
||||
GROUP(
|
||||
/* RESERVED [12] */
|
||||
MSEL4CR_19_0, MSEL4CR_19_1,
|
||||
MSEL4CR_18_0, MSEL4CR_18_1,
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
MSEL4CR_15_0, MSEL4CR_15_1,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED [4] */
|
||||
MSEL4CR_10_0, MSEL4CR_10_1,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED [3] */
|
||||
MSEL4CR_6_0, MSEL4CR_6_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL4CR_4_0, MSEL4CR_4_1,
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
MSEL4CR_1_0, MSEL4CR_1_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG("MSEL5CR", 0xE6058028, 32, 1, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("MSEL5CR", 0xE6058028, 32,
|
||||
GROUP(1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1,
|
||||
-1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1,
|
||||
-1, 1, 1, 1, 1, 1, 1, 1, -1, 1),
|
||||
GROUP(
|
||||
MSEL5CR_31_0, MSEL5CR_31_1,
|
||||
MSEL5CR_30_0, MSEL5CR_30_1,
|
||||
MSEL5CR_29_0, MSEL5CR_29_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL5CR_27_0, MSEL5CR_27_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL5CR_25_0, MSEL5CR_25_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL5CR_23_0, MSEL5CR_23_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL5CR_21_0, MSEL5CR_21_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL5CR_19_0, MSEL5CR_19_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL5CR_17_0, MSEL5CR_17_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL5CR_15_0, MSEL5CR_15_1,
|
||||
MSEL5CR_14_0, MSEL5CR_14_1,
|
||||
MSEL5CR_13_0, MSEL5CR_13_1,
|
||||
MSEL5CR_12_0, MSEL5CR_12_1,
|
||||
MSEL5CR_11_0, MSEL5CR_11_1,
|
||||
MSEL5CR_10_0, MSEL5CR_10_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL5CR_8_0, MSEL5CR_8_1,
|
||||
MSEL5CR_7_0, MSEL5CR_7_1,
|
||||
MSEL5CR_6_0, MSEL5CR_6_1,
|
||||
@ -3340,7 +3344,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MSEL5CR_4_0, MSEL5CR_4_1,
|
||||
MSEL5CR_3_0, MSEL5CR_3_1,
|
||||
MSEL5CR_2_0, MSEL5CR_2_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL5CR_0_0, MSEL5CR_0_1,
|
||||
))
|
||||
},
|
||||
|
@ -2485,16 +2485,11 @@ static const struct sh_pfc_function pinmux_functions[] = {
|
||||
};
|
||||
|
||||
static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
{ PINMUX_CFG_REG("GPSR0", 0xE6060004, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR0", 0xE6060004, 32,
|
||||
GROUP(-9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP0_31_23 RESERVED */
|
||||
GP_0_22_FN, FN_MMC0_D7,
|
||||
GP_0_21_FN, FN_MMC0_D6,
|
||||
GP_0_20_FN, FN_IP1_7_4,
|
||||
@ -2519,16 +2514,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_0_1_FN, FN_USB0_OVC,
|
||||
GP_0_0_FN, FN_USB0_PWEN, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR1", 0xE6060008, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR1", 0xE6060008, 32,
|
||||
GROUP(-9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP1_31_23 RESERVED */
|
||||
GP_1_22_FN, FN_IP4_3_0,
|
||||
GP_1_21_FN, FN_IP3_31_28,
|
||||
GP_1_20_FN, FN_IP3_27_24,
|
||||
@ -2587,22 +2577,15 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_2_1_FN, FN_IP4_11_8,
|
||||
GP_2_0_FN, FN_IP4_7_4, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR3", 0xE6060010, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR3", 0xE6060010, 32,
|
||||
GROUP(-2, 1, 1, -10, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP3_31_30 RESERVED */
|
||||
GP_3_29_FN, FN_IP10_19_16,
|
||||
GP_3_28_FN, FN_IP10_15_12,
|
||||
GP_3_27_FN, FN_IP10_11_8,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* GP3_26_17 RESERVED */
|
||||
GP_3_16_FN, FN_IP10_7_4,
|
||||
GP_3_15_FN, FN_IP10_3_0,
|
||||
GP_3_14_FN, FN_IP9_31_28,
|
||||
@ -2689,9 +2672,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_5_1_FN, FN_IP14_3_0,
|
||||
GP_5_0_FN, FN_IP13_31_28, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR0", 0xE6060040, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR0", 0xE6060040, 32, 4, GROUP(
|
||||
/* IP0_31_28 [4] */
|
||||
FN_SD0_WP, FN_IRQ7, FN_CAN0_TX_A, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -2717,9 +2698,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SD0_CLK, 0, 0, FN_SSI_SCK1_C, FN_RX3_C, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR1", 0xE6060044, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR1", 0xE6060044, 32, 4, GROUP(
|
||||
/* IP1_31_28 [4] */
|
||||
FN_D5, FN_HRX2, FN_SCL1_B, FN_PWM2_C, FN_TCLK2_B, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -2745,9 +2724,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_MMC0_D4, FN_SD1_CD, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR2", 0xE6060048, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR2", 0xE6060048, 32, 4, GROUP(
|
||||
/* IP2_31_28 [4] */
|
||||
FN_D13, FN_MSIOF2_SYNC_A, 0, FN_RX4_C, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
@ -2773,9 +2750,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_D6, FN_HTX2, FN_SDA1_B, FN_PWM4_C, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR3", 0xE606004C, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR3", 0xE606004C, 32, 4, GROUP(
|
||||
/* IP3_31_28 [4] */
|
||||
FN_QSPI0_SSL, FN_WE1_N, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0,
|
||||
@ -2802,9 +2777,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, FN_AVB_AVTP_CAPTURE_A,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR4", 0xE6060050, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR4", 0xE6060050, 32, 4, GROUP(
|
||||
/* IP4_31_28 [4] */
|
||||
FN_DU0_DR6, 0, FN_RX2_C, 0, 0, 0, FN_A6, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -2830,9 +2803,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_EX_WAIT0, FN_CAN_CLK_B, FN_SCIF_CLK_A, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR5", 0xE6060054, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR5", 0xE6060054, 32, 4, GROUP(
|
||||
/* IP5_31_28 [4] */
|
||||
FN_DU0_DG6, 0, FN_HRX1_C, 0, 0, 0, FN_A14, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
@ -2858,9 +2829,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_DU0_DR7, 0, FN_TX2_C, 0, FN_PWM2_B, 0, FN_A7, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR6", 0xE6060058, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR6", 0xE6060058, 32, 4, GROUP(
|
||||
/* IP6_31_28 [4] */
|
||||
FN_DU0_DB6, 0, 0, 0, 0, 0, FN_A22, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
@ -2886,9 +2855,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_DU0_DG7, 0, FN_HTX1_C, 0, FN_PWM6_B, 0, FN_A15,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR7", 0xE606005C, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR7", 0xE606005C, 32, 4, GROUP(
|
||||
/* IP7_31_28 [4] */
|
||||
FN_DU0_DISP, 0, 0, 0, FN_CAN1_RX_C, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
@ -2914,9 +2881,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_DU0_DB7, 0, 0, 0, 0, 0, FN_A23, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR8", 0xE6060060, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR8", 0xE6060060, 32, 4, GROUP(
|
||||
/* IP8_31_28 [4] */
|
||||
FN_VI1_DATA5, 0, 0, 0, FN_AVB_RXD4, FN_ETH_LINK, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
@ -2942,9 +2907,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_DU0_CDE, 0, 0, 0, FN_CAN1_TX_C, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR9", 0xE6060064, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR9", 0xE6060064, 32, 4, GROUP(
|
||||
/* IP9_31_28 [4] */
|
||||
FN_VI1_DATA9, 0, 0, FN_SDA2_B, FN_AVB_TXD0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
@ -2970,9 +2933,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_VI1_DATA6, 0, 0, 0, FN_AVB_RXD5, FN_ETH_TXD1, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR10", 0xE6060068, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR10", 0xE6060068, 32, 4, GROUP(
|
||||
/* IP10_31_28 [4] */
|
||||
FN_SCL1_A, FN_RX4_A, FN_PWM5_D, FN_DU1_DR0, 0, 0,
|
||||
FN_SSI_SCK6_B, FN_VI0_G0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -2999,9 +2960,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_VI1_DATA10, 0, 0, FN_CAN0_RX_B, FN_AVB_TXD1, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR11", 0xE606006C, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR11", 0xE606006C, 32, 4, GROUP(
|
||||
/* IP11_31_28 [4] */
|
||||
FN_HRX1_A, FN_SCL4_A, FN_PWM6_A, FN_DU1_DG0, FN_RX0_A, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -3031,9 +2990,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SDA1_A, FN_TX4_A, 0, FN_DU1_DR1, 0, 0, FN_SSI_WS6_B,
|
||||
FN_VI0_G1, 0, 0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR12", 0xE6060070, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR12", 0xE6060070, 32, 4, GROUP(
|
||||
/* IP12_31_28 [4] */
|
||||
FN_SD2_DAT2, FN_RX2_A, 0, FN_DU1_DB0, FN_SSI_SDATA2_B, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -3059,9 +3016,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_HTX1_A, FN_SDA4_A, 0, FN_DU1_DG1, FN_TX0_A, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR13", 0xE6060074, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR13", 0xE6060074, 32, 4, GROUP(
|
||||
/* IP13_31_28 [4] */
|
||||
FN_SSI_SCK5_A, 0, 0, FN_DU1_DOTCLKOUT1, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
@ -3088,9 +3043,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SD2_DAT3, FN_TX2_A, 0, FN_DU1_DB1, FN_SSI_WS9_B, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR14", 0xE6060078, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR14", 0xE6060078, 32, 4, GROUP(
|
||||
/* IP14_31_28 [4] */
|
||||
FN_SSI_SDATA7_A, 0, 0, FN_IRQ8, FN_AUDIO_CLKA_D, FN_CAN_CLK_D,
|
||||
FN_VI0_G5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -3116,9 +3069,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SSI_WS5_A, 0, FN_SCL3_C, FN_DU1_DOTCLKIN, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR15", 0xE606007C, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR15", 0xE606007C, 32, 4, GROUP(
|
||||
/* IP15_31_28 [4] */
|
||||
FN_SSI_WS4_A, 0, FN_AVB_PHY_INT, 0, 0, 0, FN_VI0_R5, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
@ -3144,9 +3095,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SSI_SCK0129_A, FN_MSIOF1_RXD_A, FN_RX5_D, 0, 0, 0,
|
||||
FN_VI0_G6, 0, 0, 0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR16", 0xE6060080, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
{ PINMUX_CFG_REG("IPSR16", 0xE6060080, 32, 4, GROUP(
|
||||
/* IP16_31_28 [4] */
|
||||
FN_SSI_SDATA2_A, FN_HRTS1_N_B, 0, 0, 0, 0,
|
||||
FN_VI0_DATA4_VI0_B4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -3174,10 +3123,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR17", 0xE6060084, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(-4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* IP17_31_28 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP17_31_28 [4] RESERVED */
|
||||
/* IP17_27_24 [4] */
|
||||
FN_AUDIO_CLKOUT_A, FN_SDA4_B, 0, 0, 0, 0,
|
||||
FN_VI0_VSYNC_N, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -3201,25 +3149,13 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_VI0_DATA5_VI0_B5, 0, 0, 0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL0", 0xE60600C0, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1,
|
||||
3, 3, 1, 2, 3, 3, 1),
|
||||
GROUP(-5, 2, -2, 2, 2, 2, -1,
|
||||
3, 3, -1, 2, 3, 3, 1),
|
||||
GROUP(
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [5] */
|
||||
/* SEL_ADGA [2] */
|
||||
FN_SEL_ADGA_0, FN_SEL_ADGA_1, FN_SEL_ADGA_2, FN_SEL_ADGA_3,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [2] */
|
||||
/* SEL_CANCLK [2] */
|
||||
FN_SEL_CANCLK_0, FN_SEL_CANCLK_1, FN_SEL_CANCLK_2,
|
||||
FN_SEL_CANCLK_3,
|
||||
@ -3228,7 +3164,6 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
/* SEL_CAN0 [2] */
|
||||
FN_SEL_CAN0_0, FN_SEL_CAN0_1, FN_SEL_CAN0_2, FN_SEL_CAN0_3,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_I2C04 [3] */
|
||||
FN_SEL_I2C04_0, FN_SEL_I2C04_1, FN_SEL_I2C04_2, FN_SEL_I2C04_3,
|
||||
FN_SEL_I2C04_4, 0, 0, 0,
|
||||
@ -3236,7 +3171,6 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_I2C03_0, FN_SEL_I2C03_1, FN_SEL_I2C03_2, FN_SEL_I2C03_3,
|
||||
FN_SEL_I2C03_4, 0, 0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_I2C02 [2] */
|
||||
FN_SEL_I2C02_0, FN_SEL_I2C02_1, FN_SEL_I2C02_2, FN_SEL_I2C02_3,
|
||||
/* SEL_I2C01 [3] */
|
||||
@ -3249,8 +3183,8 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_AVB_0, FN_SEL_AVB_1, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL1", 0xE60600C4, 32,
|
||||
GROUP(1, 3, 3, 2, 2, 1, 2, 2, 2, 1, 1, 1,
|
||||
1, 1, 2, 1, 1, 2, 2, 1),
|
||||
GROUP(1, 3, 3, 2, 2, 1, 2, 2, 2, -1, 1, -1,
|
||||
1, 1, -2, 1, 1, -2, 2, 1),
|
||||
GROUP(
|
||||
/* SEL_SCIFCLK [1] */
|
||||
FN_SEL_SCIFCLK_0, FN_SEL_SCIFCLK_1,
|
||||
@ -3273,52 +3207,28 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
/* SEL_MSIOF2 [2] */
|
||||
FN_SEL_MSIOF2_0, FN_SEL_MSIOF2_1, FN_SEL_MSIOF2_2, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_MSIOF1 [1] */
|
||||
FN_SEL_MSIOF1_0, FN_SEL_MSIOF1_1,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_MSIOF0 [1] */
|
||||
FN_SEL_MSIOF0_0, FN_SEL_MSIOF0_1,
|
||||
/* SEL_RCN [1] */
|
||||
FN_SEL_RCN_0, FN_SEL_RCN_1,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* SEL_TMU2 [1] */
|
||||
FN_SEL_TMU2_0, FN_SEL_TMU2_1,
|
||||
/* SEL_TMU1 [1] */
|
||||
FN_SEL_TMU1_0, FN_SEL_TMU1_1,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* SEL_HSCIF1 [2] */
|
||||
FN_SEL_HSCIF1_0, FN_SEL_HSCIF1_1, FN_SEL_HSCIF1_2, 0,
|
||||
/* SEL_HSCIF0 [1] */
|
||||
FN_SEL_HSCIF0_0, FN_SEL_HSCIF0_1, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL2", 0xE60600C8, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(-10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [10] */
|
||||
/* SEL_ADGB [2] */
|
||||
FN_SEL_ADGB_0, FN_SEL_ADGB_1, FN_SEL_ADGB_2, 0,
|
||||
/* SEL_ADGC [2] */
|
||||
|
@ -2240,11 +2240,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG_VAR("IPSR0", 0xfffc0020, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
GROUP(-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 3, 4, 3, 3, 2),
|
||||
GROUP(
|
||||
/* IP0_31 [1] */
|
||||
0, 0,
|
||||
/* IP0_31 [1] RESERVED */
|
||||
/* IP0_30 [1] */
|
||||
FN_A19, 0,
|
||||
/* IP0_29 [1] */
|
||||
@ -2296,13 +2295,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR1", 0xfffc0024, 32,
|
||||
GROUP(1, 1, 2, 3, 1, 3, 3, 1, 2, 4, 3, 3,
|
||||
GROUP(-2, 2, 3, 1, 3, 3, 1, 2, 4, 3, 3,
|
||||
3, 1, 1),
|
||||
GROUP(
|
||||
/* IP1_31 [1] */
|
||||
0, 0,
|
||||
/* IP1_30 [1] */
|
||||
0, 0,
|
||||
/* IP1_31_30 [2] RESERVED */
|
||||
/* IP1_29_28 [2] */
|
||||
FN_EX_CS1, FN_MMC_D4, 0, 0,
|
||||
/* IP1_27_25 [3] */
|
||||
@ -2437,11 +2433,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR4", 0xfffc0030, 32,
|
||||
GROUP(1, 2, 2, 2, 4, 4, 2, 2, 2, 2, 1, 1,
|
||||
GROUP(-1, 2, 2, 2, 4, 4, 2, 2, 2, 2, 1, 1,
|
||||
3, 3, 1),
|
||||
GROUP(
|
||||
/* IP4_31 [1] */
|
||||
0, 0,
|
||||
/* IP4_31 [1] RESERVED */
|
||||
/* IP4_30_29 [2] */
|
||||
FN_VI0_R4_B, FN_DU0_DB4, FN_LCDOUT20, 0,
|
||||
/* IP4_28_27 [2] */
|
||||
@ -2481,12 +2476,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR5", 0xfffc0034, 32,
|
||||
GROUP(1, 2, 3, 3, 2, 3, 3, 2, 1, 2, 2, 1,
|
||||
GROUP(-1, 2, 3, 3, 2, 3, 3, 2, 1, 2, 2, 1,
|
||||
1, 2, 2, 2),
|
||||
GROUP(
|
||||
|
||||
/* IP5_31 [1] */
|
||||
0, 0,
|
||||
/* IP5_31 [1] RESERVED */
|
||||
/* IP5_30_29 [2] */
|
||||
FN_SSI_SDATA7, FN_HSPI_TX0_B, FN_RX2_A, FN_CAN0_RX_B,
|
||||
/* IP5_28_26 [3] */
|
||||
@ -2619,12 +2613,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR8", 0xfffc0040, 32,
|
||||
GROUP(1, 1, 3, 3, 2, 3, 3, 2, 3, 2, 3, 3, 3),
|
||||
GROUP(-2, 3, 3, 2, 3, 3, 2, 3, 2, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP8_31 [1] */
|
||||
0, 0,
|
||||
/* IP8_30 [1] */
|
||||
0, 0,
|
||||
/* IP8_31_30 [2] RESERVED */
|
||||
/* IP8_29_27 [3] */
|
||||
FN_VI0_G3, FN_SD2_CMD_B, FN_VI1_DATA5, FN_DU1_DR5,
|
||||
0, FN_HRX1_B, 0, 0,
|
||||
@ -2660,12 +2651,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR9", 0xfffc0044, 32,
|
||||
GROUP(1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(-2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP9_31 [1] */
|
||||
0, 0,
|
||||
/* IP9_30 [1] */
|
||||
0, 0,
|
||||
/* IP9_31_30 [2] RESERVED */
|
||||
/* IP9_29_27 [3] */
|
||||
FN_VI1_DATA11_A, FN_DU1_EXHSYNC_DU1_HSYNC,
|
||||
FN_ETH_RXD1, FN_FMIN_C,
|
||||
@ -2703,24 +2691,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR10", 0xfffc0048, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 4,
|
||||
3, 3, 3),
|
||||
GROUP(-7, 3, 3, 3, 3, 4, 3, 3, 3),
|
||||
GROUP(
|
||||
|
||||
/* IP10_31 [1] */
|
||||
0, 0,
|
||||
/* IP10_30 [1] */
|
||||
0, 0,
|
||||
/* IP10_29 [1] */
|
||||
0, 0,
|
||||
/* IP10_28 [1] */
|
||||
0, 0,
|
||||
/* IP10_27 [1] */
|
||||
0, 0,
|
||||
/* IP10_26 [1] */
|
||||
0, 0,
|
||||
/* IP10_25 [1] */
|
||||
0, 0,
|
||||
/* IP10_31_25 [7] RESERVED */
|
||||
/* IP10_24_22 [3] */
|
||||
FN_SD2_WP_A, FN_VI1_DATA15, FN_EX_WAIT2_B, FN_DACK0_B,
|
||||
FN_HSPI_TX2_B, FN_CAN_CLK_C, 0, 0,
|
||||
@ -2754,12 +2728,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL0", 0xfffc0050, 32,
|
||||
GROUP(1, 1, 2, 2, 3, 2, 2, 1, 1, 1, 1, 2,
|
||||
1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(-1, 1, 2, 2, 3, 2, 2, -1, 1, 1, 1, 2,
|
||||
-1, 1, 1, 1, 2, 1, -1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
|
||||
/* SEL 31 [1] */
|
||||
0, 0,
|
||||
/* SEL 31 [1] RESERVED */
|
||||
/* SEL_30 (SCIF5) [1] */
|
||||
FN_SEL_SCIF5_A, FN_SEL_SCIF5_B,
|
||||
/* SEL_29_28 (SCIF4) [2] */
|
||||
@ -2779,8 +2752,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
/* SEL_20_19 (SCIF0) [2] */
|
||||
FN_SEL_SCIF0_A, FN_SEL_SCIF0_B,
|
||||
FN_SEL_SCIF0_C, FN_SEL_SCIF0_D,
|
||||
/* SEL_18 [1] */
|
||||
0, 0,
|
||||
/* SEL_18 [1] RESERVED */
|
||||
/* SEL_17 (SSI2) [1] */
|
||||
FN_SEL_SSI2_A, FN_SEL_SSI2_B,
|
||||
/* SEL_16 (SSI1) [1] */
|
||||
@ -2790,8 +2762,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
/* SEL_14_13 (VI0) [2] */
|
||||
FN_SEL_VI0_A, FN_SEL_VI0_B,
|
||||
FN_SEL_VI0_C, FN_SEL_VI0_D,
|
||||
/* SEL_12 [1] */
|
||||
0, 0,
|
||||
/* SEL_12 [1] RESERVED */
|
||||
/* SEL_11 (SD2) [1] */
|
||||
FN_SEL_SD2_A, FN_SEL_SD2_B,
|
||||
/* SEL_10 (SD1) [1] */
|
||||
@ -2803,8 +2774,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_IRQ2_C, 0,
|
||||
/* SEL_6 (IRQ1) [1] */
|
||||
FN_SEL_IRQ1_A, FN_SEL_IRQ1_B,
|
||||
/* SEL_5 [1] */
|
||||
0, 0,
|
||||
/* SEL_5 [1] RESERVED */
|
||||
/* SEL_4 (DREQ2) [1] */
|
||||
FN_SEL_DREQ2_A, FN_SEL_DREQ2_B,
|
||||
/* SEL_3 (DREQ1) [1] */
|
||||
@ -2818,18 +2788,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL1", 0xfffc0054, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1),
|
||||
GROUP(-4, 1, 1, 2, 1, 1, -7,
|
||||
2, 2, 2, 1, 1, 1, 1, 2, 2, 1),
|
||||
GROUP(
|
||||
|
||||
/* SEL_31 [1] */
|
||||
0, 0,
|
||||
/* SEL_30 [1] */
|
||||
0, 0,
|
||||
/* SEL_29 [1] */
|
||||
0, 0,
|
||||
/* SEL_28 [1] */
|
||||
0, 0,
|
||||
/* SEL_31_28 [4] RESERVED */
|
||||
/* SEL_27 (CAN1) [1] */
|
||||
FN_SEL_CAN1_A, FN_SEL_CAN1_B,
|
||||
/* SEL_26 (CAN0) [1] */
|
||||
@ -2841,20 +2804,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_HSCIF1_A, FN_SEL_HSCIF1_B,
|
||||
/* SEL_22 (HSCIF0) [1] */
|
||||
FN_SEL_HSCIF0_A, FN_SEL_HSCIF0_B,
|
||||
/* SEL_21 [1] */
|
||||
0, 0,
|
||||
/* SEL_20 [1] */
|
||||
0, 0,
|
||||
/* SEL_19 [1] */
|
||||
0, 0,
|
||||
/* SEL_18 [1] */
|
||||
0, 0,
|
||||
/* SEL_17 [1] */
|
||||
0, 0,
|
||||
/* SEL_16 [1] */
|
||||
0, 0,
|
||||
/* SEL_15 [1] */
|
||||
0, 0,
|
||||
/* SEL_21_15 [7] RESERVED */
|
||||
/* SEL_14_13 (REMOCON) [2] */
|
||||
FN_SEL_REMOCON_A, FN_SEL_REMOCON_B,
|
||||
FN_SEL_REMOCON_C, 0,
|
||||
|
@ -3300,13 +3300,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_5_1_FN, FN_A2,
|
||||
GP_5_0_FN, FN_A1 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR6", 0xfffc001c, 32, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR6", 0xfffc001c, 32,
|
||||
GROUP(-23, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP6_31_9 RESERVED */
|
||||
GP_6_8_FN, FN_IP3_20,
|
||||
GP_6_7_FN, FN_IP3_19,
|
||||
GP_6_6_FN, FN_IP3_18,
|
||||
@ -3319,10 +3316,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG_VAR("IPSR0", 0xfffc0020, 32,
|
||||
GROUP(1, 3, 2, 1, 2, 4, 3, 2, 2, 2, 2, 2, 3, 3),
|
||||
GROUP(-1, 3, 2, 1, 2, 4, 3, 2, 2, 2, 2, 2, 3, 3),
|
||||
GROUP(
|
||||
/* IP0_31 [1] */
|
||||
0, 0,
|
||||
/* IP0_31 [1] RESERVED */
|
||||
/* IP0_30_28 [3] */
|
||||
FN_RD_WR, FN_FWE, FN_ATAG0, FN_VI1_R7,
|
||||
FN_HRTS1, FN_RX4_C, 0, 0,
|
||||
@ -3358,10 +3354,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SCIF_CLK, FN_TCLK0_C, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR1", 0xfffc0024, 32,
|
||||
GROUP(3, 4, 2, 2, 2, 4, 4, 4, 3, 2, 2),
|
||||
GROUP(-3, 4, 2, 2, 2, 4, 4, 4, 3, 2, 2),
|
||||
GROUP(
|
||||
/* IP1_31_29 [3] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP1_31_29 [3] RESERVED */
|
||||
/* IP1_28_25 [4] */
|
||||
FN_HTX0, FN_TX1, FN_SDATA, FN_CTS0_C,
|
||||
FN_SUB_TCK, FN_CC5_STATE2, FN_CC5_STATE10, FN_CC5_STATE18,
|
||||
@ -3397,10 +3392,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_EX_CS0, FN_RX3_C_IRDA_RX_C, FN_MMC0_D6, FN_FD6 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR2", 0xfffc0028, 32,
|
||||
GROUP(1, 3, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4),
|
||||
GROUP(-1, 3, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* IP2_31 [1] */
|
||||
0, 0,
|
||||
/* IP2_31 [1] RESERVED */
|
||||
/* IP2_30_28 [3] */
|
||||
FN_DU0_DG0, FN_LCDOUT8, FN_DREQ1, FN_SCL2,
|
||||
FN_AUDATA2, 0, 0, 0,
|
||||
@ -3545,11 +3539,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_DU0_DISP, FN_QPOLA, FN_CAN_CLK_C, FN_SCK2_C ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR5", 0xfffc0034, 32,
|
||||
GROUP(1, 2, 1, 4, 3, 4, 2, 2, 2, 2, 1, 1,
|
||||
GROUP(-1, 2, 1, 4, 3, 4, 2, 2, 2, 2, 1, 1,
|
||||
1, 1, 1, 1, 3),
|
||||
GROUP(
|
||||
/* IP5_31 [1] */
|
||||
0, 0,
|
||||
/* IP5_31 [1] RESERVED */
|
||||
/* IP5_30_29 [2] */
|
||||
FN_AUDIO_CLKB, FN_USB_OVC2, FN_CAN_DEBUGOUT0, FN_MOUT0,
|
||||
/* IP5_28 [1] */
|
||||
@ -3592,15 +3585,13 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_RX5, FN_RTS0_D_TANS_D, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR6", 0xfffc0038, 32,
|
||||
GROUP(1, 2, 2, 2, 2, 3, 2, 3, 3, 3, 1, 2,
|
||||
GROUP(-1, 2, -2, 2, 2, 3, 2, 3, 3, 3, 1, 2,
|
||||
2, 2, 2),
|
||||
GROUP(
|
||||
/* IP6_31 [1] */
|
||||
0, 0,
|
||||
/* IP6_31 [1] RESERVED */
|
||||
/* IP6_30_29 [2] */
|
||||
FN_SSI_SCK6, FN_ADICHS0, FN_CAN0_TX, FN_IERX_B,
|
||||
/* IP_28_27 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP_28_27 [2] RESERVED */
|
||||
/* IP6_26_25 [2] */
|
||||
FN_SSI_SDATA5, FN_ADIDATA, FN_CAN_DEBUGOUT12, FN_RX3_IRDA_RX,
|
||||
/* IP6_24_23 [2] */
|
||||
@ -3631,11 +3622,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SSI_SCK0129, FN_CAN_DEBUGOUT1, FN_MOUT1, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR7", 0xfffc003c, 32,
|
||||
GROUP(1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
|
||||
GROUP(-1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
|
||||
3, 2, 2),
|
||||
GROUP(
|
||||
/* IP7_31 [1] */
|
||||
0, 0,
|
||||
/* IP7_31 [1] RESERVED */
|
||||
/* IP7_30_29 [2] */
|
||||
FN_SD0_WP, FN_DACK2, FN_CTS1_B, 0,
|
||||
/* IP7_28_27 [2] */
|
||||
@ -3669,10 +3659,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SSI_WS6, FN_ADICHS1, FN_CAN0_RX, FN_IETX_B ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR8", 0xfffc0040, 32,
|
||||
GROUP(1, 3, 3, 2, 2, 1, 1, 1, 2, 4, 4, 4, 4),
|
||||
GROUP(-1, 3, 3, 2, 2, 1, 1, 1, 2, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* IP8_31 [1] */
|
||||
0, 0,
|
||||
/* IP8_31 [1] RESERVED */
|
||||
/* IP8_30_28 [3] */
|
||||
FN_VI0_VSYNC, FN_VI0_DATA1_B_VI0_B1_B, FN_RTS1_C_TANS_C, FN_RX4_D,
|
||||
FN_PWMFSW0_C, 0, 0, 0,
|
||||
@ -3713,11 +3702,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR9", 0xfffc0044, 32,
|
||||
GROUP(2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 1,
|
||||
GROUP(-2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 1,
|
||||
1, 1, 1, 2, 2),
|
||||
GROUP(
|
||||
/* IP9_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP9_31_30 [2] RESERVED */
|
||||
/* IP9_29_28 [2] */
|
||||
FN_VI0_G7, FN_ETH_RXD1, FN_SD2_DAT3_B, FN_ARM_TRACEDATA_9,
|
||||
/* IP9_27_26 [2] */
|
||||
@ -3790,10 +3778,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_ARM_TRACEDATA_10, FN_DREQ0_C, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR11", 0xfffc004c, 32,
|
||||
GROUP(2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(-2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP11_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP11_31_30 [2] RESERVED */
|
||||
/* IP11_29_27 [3] */
|
||||
FN_VI1_G1, FN_VI3_DATA1, FN_SSI_SCK1, FN_TS_SDEN1,
|
||||
FN_DACK2_B, FN_RX2, FN_HRTS0_B, 0,
|
||||
@ -3826,19 +3813,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_ADICLK_B, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR12", 0xfffc0050, 32,
|
||||
GROUP(4, 4, 4, 2, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(-14, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP12_31_28 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP12_27_24 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP12_23_20 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP12_19_18 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP12_31_18 [14] RESERVED */
|
||||
/* IP12_17_15 [3] */
|
||||
FN_VI1_G7, FN_VI3_DATA7, FN_GPS_MAG, FN_FCE,
|
||||
FN_SCK4_B, 0, 0, 0,
|
||||
@ -3904,7 +3881,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_EXBUS0_0, FN_SEL_EXBUS0_1, FN_SEL_EXBUS0_2, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL2", 0xfffc0094, 32,
|
||||
GROUP(2, 2, 2, 2, 1, 1, 1, 3, 1, 2, 2, 2,
|
||||
GROUP(2, 2, 2, 2, 1, 1, 1, 3, 1, -6,
|
||||
2, 1, 1, 2, 1, 2, 2),
|
||||
GROUP(
|
||||
/* SEL_TMU1 [2] */
|
||||
@ -3926,12 +3903,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_PWMFSW_3, FN_SEL_PWMFSW_4, 0, 0, 0,
|
||||
/* SEL_ADI [1] */
|
||||
FN_SEL_ADI_0, FN_SEL_ADI_1,
|
||||
/* [2] */
|
||||
0, 0, 0, 0,
|
||||
/* [2] */
|
||||
0, 0, 0, 0,
|
||||
/* [2] */
|
||||
0, 0, 0, 0,
|
||||
/* [6] RESERVED */
|
||||
/* SEL_GPS [2] */
|
||||
FN_SEL_GPS_0, FN_SEL_GPS_1, FN_SEL_GPS_2, FN_SEL_GPS_3,
|
||||
/* SEL_SIM [1] */
|
||||
|
@ -5122,10 +5122,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_5_0_FN, FN_IP14_21_19 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR0", 0xE6060020, 32,
|
||||
GROUP(1, 4, 4, 3, 4, 4, 3, 3, 3, 3),
|
||||
GROUP(-1, 4, 4, 3, 4, 4, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP0_31 [1] */
|
||||
0, 0,
|
||||
/* IP0_31 [1] RESERVED */
|
||||
/* IP0_30_27 [4] */
|
||||
FN_D8, FN_SCIFA1_SCK_C, FN_AVB_TXD0, 0,
|
||||
FN_VI0_G0, FN_VI0_G0_B, FN_VI2_DATA0_VI2_B0,
|
||||
@ -5159,10 +5158,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR1", 0xE6060024, 32,
|
||||
GROUP(2, 2, 2, 4, 4, 3, 3, 4, 4, 4),
|
||||
GROUP(-2, 2, 2, 4, 4, 3, 3, 4, 4, 4),
|
||||
GROUP(
|
||||
/* IP1_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP1_31_30 [2] RESERVED */
|
||||
/* IP1_29_28 [2] */
|
||||
FN_A1, FN_PWM4, 0, 0,
|
||||
/* IP1_27_26 [2] */
|
||||
@ -5197,10 +5195,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR2", 0xE6060028, 32,
|
||||
GROUP(3, 3, 4, 4, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(-3, 3, 4, 4, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP2_31_29 [3] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP2_31_29 [3] RESERVED */
|
||||
/* IP2_28_26 [3] */
|
||||
FN_A10, FN_SSI_SDATA5_B, FN_MSIOF2_SYNC, FN_VI0_R6,
|
||||
FN_VI0_R6_B, FN_VI2_DATA2_VI2_B2_B, 0, 0,
|
||||
@ -5261,10 +5258,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR4", 0xE6060030, 32,
|
||||
GROUP(2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(-2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP4_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP4_31_30 [2] RESERVED */
|
||||
/* IP4_29_27 [3] */
|
||||
FN_EX_CS2_N, FN_GPS_SIGN, FN_HRTS1_N_B,
|
||||
FN_VI3_CLKENB, FN_VI1_G0, FN_VI1_G0_B, FN_VI2_R2, 0,
|
||||
@ -5295,10 +5291,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR5", 0xE6060034, 32,
|
||||
GROUP(2, 3, 3, 3, 3, 3, 2, 3, 4, 3, 3),
|
||||
GROUP(-2, 3, 3, 3, 3, 3, 2, 3, 4, 3, 3),
|
||||
GROUP(
|
||||
/* IP5_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP5_31_30 [2] RESERVED */
|
||||
/* IP5_29_27 [3] */
|
||||
FN_DREQ0_N, FN_VI1_HSYNC_N, FN_VI1_HSYNC_N_B, FN_VI2_R7,
|
||||
FN_SSI_SCK78_C, FN_SSI_WS78_B, 0, 0,
|
||||
@ -5368,10 +5363,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_VI1_VSYNC_N_B, FN_SSI_WS78_C, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR7", 0xE606003C, 32,
|
||||
GROUP(1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 3, 3),
|
||||
GROUP(-1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 3, 3),
|
||||
GROUP(
|
||||
/* IP7_31 [1] */
|
||||
0, 0,
|
||||
/* IP7_31 [1] RESERVED */
|
||||
/* IP7_30_29 [2] */
|
||||
FN_VI0_DATA0_VI0_B0, FN_ATACS10_N, FN_AVB_RXD2, 0,
|
||||
/* IP7_28_27 [2] */
|
||||
@ -5404,11 +5398,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SIM0_D_C, FN_HCTS0_N_F, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR8", 0xE6060040, 32,
|
||||
GROUP(1, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
|
||||
GROUP(-1, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* IP8_31 [1] */
|
||||
0, 0,
|
||||
/* IP8_31 [1] RESERVED */
|
||||
/* IP8_30_29 [2] */
|
||||
FN_SD0_CMD, FN_SCIFB1_SCK_B, FN_VI1_DATA1_VI1_B1_B, 0,
|
||||
/* IP8_28 [1] */
|
||||
@ -5482,10 +5475,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SD0_DAT0, FN_SCIFB1_RXD_B, FN_VI1_DATA2_VI1_B2_B, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR10", 0xE6060048, 32,
|
||||
GROUP(2, 4, 3, 4, 4, 4, 4, 3, 4),
|
||||
GROUP(-2, 4, 3, 4, 4, 4, 4, 3, 4),
|
||||
GROUP(
|
||||
/* IP10_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP10_31_30 [2] RESERVED */
|
||||
/* IP10_29_26 [4] */
|
||||
FN_SD2_CD, FN_MMC0_D4, FN_TS_SDAT0_B, FN_USB2_EXTP, FN_GLO_I0,
|
||||
FN_VI0_DATA6_VI0_B6_B, FN_HCTS0_N_D, FN_TS_SDAT1_B,
|
||||
@ -5558,10 +5550,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_TS_SCK1_B, FN_GLO_I1_B, FN_VI3_DATA7_B, 0, 0, 0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR12", 0xE6060050, 32,
|
||||
GROUP(1, 3, 3, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2),
|
||||
GROUP(-1, 3, 3, 2, 3, 3, 3, 3, 3, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* IP12_31 [1] */
|
||||
0, 0,
|
||||
/* IP12_31 [1] RESERVED */
|
||||
/* IP12_30_28 [3] */
|
||||
FN_SSI_WS5, FN_SCIFB1_RXD, FN_IECLK_B,
|
||||
FN_DU2_EXVSYNC_DU2_VSYNC, FN_QSTB_QHE,
|
||||
@ -5598,10 +5589,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SSI_WS0129, FN_CAN0_TX_B, FN_MOUT1, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR13", 0xE6060054, 32,
|
||||
GROUP(1, 2, 3, 3, 4, 3, 3, 3, 3, 4, 3),
|
||||
GROUP(-1, 2, 3, 3, 4, 3, 3, 3, 3, 4, 3),
|
||||
GROUP(
|
||||
/* IP13_31 [1] */
|
||||
0, 0,
|
||||
/* IP13_31 [1] RESERVED */
|
||||
/* IP13_30_29 [2] */
|
||||
FN_AUDIO_CLKA, FN_SCIFB2_RTS_N, FN_CAN_DEBUGOUT14, 0,
|
||||
/* IP13_28_26 [3] */
|
||||
@ -5635,10 +5625,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_LCDOUT2, FN_CAN_DEBUGOUT5, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR14", 0xE6060058, 32,
|
||||
GROUP(1, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3),
|
||||
GROUP(-1, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP14_30 [1] */
|
||||
0, 0,
|
||||
/* IP14_30 [1] RESERVED */
|
||||
/* IP14_30_28 [3] */
|
||||
FN_SCIFA1_RTS_N, FN_AD_NCS_N, FN_RTS1_N,
|
||||
FN_MSIOF3_TXD, FN_DU1_DOTCLKOUT, FN_QSTVB_QVE,
|
||||
@ -5674,10 +5663,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_REMOCON, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR15", 0xE606005C, 32,
|
||||
GROUP(2, 2, 2, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3),
|
||||
GROUP(-2, 2, 2, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP15_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP15_31_30 [2] RESERVED */
|
||||
/* IP15_29_28 [2] */
|
||||
FN_MSIOF0_TXD, FN_ADICHS1, FN_DU2_DG6, FN_LCDOUT14,
|
||||
/* IP15_27_26 [2] */
|
||||
@ -5710,26 +5698,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_LCDOUT15, FN_SCIF_CLK_B, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR16", 0xE6060160, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 4, 1, 1, 3, 3),
|
||||
GROUP(-24, 1, 1, 3, 3),
|
||||
GROUP(
|
||||
/* IP16_31_28 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP16_27_24 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP16_23_20 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP16_19_16 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP16_15_12 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP16_11_8 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP16_31_8 [24] RESERVED */
|
||||
/* IP16_7 [1] */
|
||||
FN_USB1_OVC, FN_TCLK1_B,
|
||||
/* IP16_6 [1] */
|
||||
@ -5743,7 +5714,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL", 0xE6060090, 32,
|
||||
GROUP(3, 2, 2, 3, 2, 1, 1, 1, 2, 1, 2, 1,
|
||||
1, 1, 1, 2, 1, 1, 2, 1, 1),
|
||||
1, 1, 1, 2, -1, 1, 2, 1, 1),
|
||||
GROUP(
|
||||
/* SEL_SCIF1 [3] */
|
||||
FN_SEL_SCIF1_0, FN_SEL_SCIF1_1, FN_SEL_SCIF1_2, FN_SEL_SCIF1_3,
|
||||
@ -5782,7 +5753,6 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
/* SEL_TSIF1 [2] */
|
||||
FN_SEL_TSIF1_0, FN_SEL_TSIF1_1, FN_SEL_TSIF1_2, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_LBS [1] */
|
||||
FN_SEL_LBS_0, FN_SEL_LBS_1,
|
||||
/* SEL_TSIF0 [2] */
|
||||
@ -5793,11 +5763,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_SOF0_0, FN_SEL_SOF0_1, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL2", 0xE6060094, 32,
|
||||
GROUP(3, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1,
|
||||
3, 3, 2, 3, 2, 2),
|
||||
GROUP(-3, 1, 1, 1, 2, 1, 2, 1, -2, 1, 1, 1,
|
||||
3, 3, 2, -3, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [3] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* SEL_TMU1 [1] */
|
||||
FN_SEL_TMU1_0, FN_SEL_TMU1_1,
|
||||
/* SEL_HSCIF1 [1] */
|
||||
@ -5813,7 +5782,6 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
/* SEL_CAN1 [1] */
|
||||
FN_SEL_CAN1_0, FN_SEL_CAN1_1,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* SEL_SCIF2 [1] */
|
||||
FN_SEL_SCIF2_0, FN_SEL_SCIF2_1,
|
||||
/* SEL_ADI [1] */
|
||||
@ -5829,36 +5797,22 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
/* SEL_GPS [2] */
|
||||
FN_SEL_GPS_0, FN_SEL_GPS_1, FN_SEL_GPS_2, 0,
|
||||
/* RESERVED [3] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* SEL_SIM [2] */
|
||||
FN_SEL_SIM_0, FN_SEL_SIM_1, FN_SEL_SIM_2, 0,
|
||||
/* SEL_SSI8 [2] */
|
||||
FN_SEL_SSI8_0, FN_SEL_SSI8_1, FN_SEL_SSI8_2, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL3", 0xE6060098, 32,
|
||||
GROUP(1, 1, 2, 4, 4, 2, 2, 4, 2, 3, 2, 3, 2),
|
||||
GROUP(1, 1, -12, 2, -6, 3, 2, 3, 2),
|
||||
GROUP(
|
||||
/* SEL_IICDVFS [1] */
|
||||
FN_SEL_IICDVFS_0, FN_SEL_IICDVFS_1,
|
||||
/* SEL_IIC0 [1] */
|
||||
FN_SEL_IIC0_0, FN_SEL_IIC0_1,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [12] */
|
||||
/* SEL_IEB [2] */
|
||||
FN_SEL_IEB_0, FN_SEL_IEB_1, FN_SEL_IEB_2, 0,
|
||||
/* RESERVED [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [6] */
|
||||
/* SEL_IIC2 [3] */
|
||||
FN_SEL_IIC2_0, FN_SEL_IIC2_1, FN_SEL_IIC2_2, FN_SEL_IIC2_3,
|
||||
FN_SEL_IIC2_4, 0, 0, 0,
|
||||
|
@ -5686,11 +5686,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_7_0_FN, FN_IP15_17_15 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR0", 0xE6060020, 32,
|
||||
GROUP(1, 2, 2, 2, 2, 2, 2, 3, 1, 1, 1, 1,
|
||||
GROUP(-1, 2, 2, 2, 2, 2, 2, 3, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* IP0_31 [1] */
|
||||
0, 0,
|
||||
/* IP0_31 [1] RESERVED */
|
||||
/* IP0_30_29 [2] */
|
||||
FN_A6, FN_MSIOF1_SCK,
|
||||
0, 0,
|
||||
@ -5783,10 +5782,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR2", 0xE6060028, 32,
|
||||
GROUP(2, 3, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 3),
|
||||
GROUP(-2, 3, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 3),
|
||||
GROUP(
|
||||
/* IP2_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP2_31_30 [2] RESERVED */
|
||||
/* IP2_29_27 [3] */
|
||||
FN_EX_CS3_N, FN_ATADIR0_N, FN_MSIOF2_TXD,
|
||||
FN_ATAG0_N, 0, FN_EX_WAIT1,
|
||||
@ -5820,10 +5818,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SCIFB1_TXD_C, 0, FN_SCIFB1_SCK_B, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR3", 0xE606002C, 32,
|
||||
GROUP(1, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3),
|
||||
GROUP(-1, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP3_31 [1] */
|
||||
0, 0,
|
||||
/* IP3_31 [1] RESERVED */
|
||||
/* IP3_30_28 [3] */
|
||||
FN_SSI_WS0129, FN_HTX0_C, FN_HTX2_C,
|
||||
FN_SCIFB0_TXD_C, FN_SCIFB2_TXD_C,
|
||||
@ -5859,11 +5856,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR4", 0xE6060030, 32,
|
||||
GROUP(1, 3, 2, 2, 2, 1, 1, 1, 3, 3, 3, 2,
|
||||
GROUP(-1, 3, 2, 2, 2, 1, 1, 1, 3, 3, 3, 2,
|
||||
3, 3, 2),
|
||||
GROUP(
|
||||
/* IP4_31 [1] */
|
||||
0, 0,
|
||||
/* IP4_31 [1] RESERVED */
|
||||
/* IP4_30_28 [3] */
|
||||
FN_SSI_SCK5, FN_MSIOF1_SCK_C, FN_TS_SDATA0, FN_GLO_I0,
|
||||
FN_MSIOF2_SYNC_D, FN_VI1_R2_B,
|
||||
@ -5943,10 +5939,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR6", 0xE6060038, 32,
|
||||
GROUP(2, 3, 3, 3, 2, 3, 2, 2, 2, 2, 2, 3, 3),
|
||||
GROUP(-2, 3, 3, 3, 2, 3, 2, 2, 2, 2, 2, 3, 3),
|
||||
GROUP(
|
||||
/* IP6_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP6_31_30 [2] RESERVED */
|
||||
/* IP6_29_27 [3] */
|
||||
FN_IRQ8, FN_HRTS1_N_C, FN_MSIOF1_RXD_B,
|
||||
FN_GPS_SIGN_C, FN_GPS_SIGN_D,
|
||||
@ -5984,10 +5979,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR7", 0xE606003C, 32,
|
||||
GROUP(2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3),
|
||||
GROUP(-2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP7_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP7_31_30 [2] RESERVED */
|
||||
/* IP7_29_27 [3] */
|
||||
FN_DU1_DG2, FN_LCDOUT10, FN_VI1_DATA4_B, FN_SCIF1_SCK_B,
|
||||
FN_SCIFA1_SCK, FN_SSI_SCK78_B,
|
||||
@ -6026,10 +6020,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR8", 0xE6060040, 32,
|
||||
GROUP(1, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(-1, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP8_31 [1] */
|
||||
0, 0,
|
||||
/* IP8_31 [1] RESERVED */
|
||||
/* IP8_30_28 [3] */
|
||||
FN_DU1_DB5, FN_LCDOUT21, FN_TX3, FN_SCIFA3_TXD, FN_CAN1_TX,
|
||||
0, 0, 0,
|
||||
@ -6201,10 +6194,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_I2C1_SDA_D, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR12", 0xE6060050, 32,
|
||||
GROUP(2, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2),
|
||||
GROUP(-2, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2),
|
||||
GROUP(
|
||||
/* IP12_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP12_31_30 [2] RESERVED */
|
||||
/* IP12_29_27 [3] */
|
||||
FN_STP_ISCLK_0, FN_AVB_TX_EN, FN_SCIFB2_RXD_D,
|
||||
FN_ADICS_SAMP_B, FN_MSIOF0_SCK_C,
|
||||
@ -6243,11 +6235,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_ETH_RX_ER, FN_AVB_CRS, FN_I2C3_SCL, FN_IIC0_SCL, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR13", 0xE6060054, 32,
|
||||
GROUP(1, 3, 1, 1, 1, 2, 1, 3, 3, 1, 1, 1,
|
||||
GROUP(-1, 3, 1, 1, 1, 2, 1, 3, 3, 1, 1, 1,
|
||||
1, 1, 1, 3, 2, 2, 3),
|
||||
GROUP(
|
||||
/* IP13_31 [1] */
|
||||
0, 0,
|
||||
/* IP13_31 [1] RESERVED */
|
||||
/* IP13_30_28 [3] */
|
||||
FN_SD1_CD, FN_PWM0, FN_TPU_TO0, FN_I2C1_SCL_C,
|
||||
0, 0, 0, 0,
|
||||
@ -6340,10 +6331,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SD1_WP, FN_PWM1_B, FN_I2C1_SDA_C, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR15", 0xE606005C, 32,
|
||||
GROUP(2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2),
|
||||
GROUP(-2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2),
|
||||
GROUP(
|
||||
/* IP15_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP15_31_30 [2] RESERVED */
|
||||
/* IP15_29_27 [3] */
|
||||
FN_HTX0, FN_SCIFB0_TXD, 0, FN_GLO_SCLK_C,
|
||||
FN_CAN0_TX_B, FN_VI1_DATA5_C,
|
||||
@ -6382,23 +6372,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SIM0_RST, FN_IETX, FN_CAN1_TX_D, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR16", 0xE6060160, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 2, 2, 2, 3, 3),
|
||||
GROUP(-20, 2, 2, 2, 3, 3),
|
||||
GROUP(
|
||||
/* IP16_31_28 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP16_27_24 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP16_23_20 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP16_19_16 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP16_15_12 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED [20] */
|
||||
/* IP16_11_10 [2] */
|
||||
FN_HRTS1_N, FN_SCIFB1_RTS_N, FN_MLB_DAT, FN_CAN1_RX_B,
|
||||
/* IP16_9_8 [2] */
|
||||
@ -6415,11 +6391,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL", 0xE6060090, 32,
|
||||
GROUP(1, 2, 2, 2, 3, 2, 1, 1, 1, 1, 3, 2,
|
||||
2, 2, 1, 2, 2, 2),
|
||||
GROUP(-1, 2, 2, 2, 3, 2, 1, 1, 1, 1, 3, -2,
|
||||
2, -2, 1, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_SCIF1 [2] */
|
||||
FN_SEL_SCIF1_0, FN_SEL_SCIF1_1, FN_SEL_SCIF1_2, FN_SEL_SCIF1_3,
|
||||
/* SEL_SCIFB [2] */
|
||||
@ -6446,11 +6421,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_HSCIF1_3, FN_SEL_HSCIF1_4,
|
||||
0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* SEL_VI1 [2] */
|
||||
FN_SEL_VI1_0, FN_SEL_VI1_1, FN_SEL_VI1_2, 0,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* SEL_TMU [1] */
|
||||
FN_SEL_TMU1_0, FN_SEL_TMU1_1,
|
||||
/* SEL_LBS [2] */
|
||||
@ -6461,15 +6434,14 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_SOF0_0, FN_SEL_SOF0_1, FN_SEL_SOF0_2, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL2", 0xE6060094, 32,
|
||||
GROUP(3, 1, 1, 3, 2, 1, 1, 2, 2, 1, 3, 2,
|
||||
1, 2, 2, 2, 1, 1, 1),
|
||||
GROUP(3, -1, 1, 3, 2, -1, 1, 2, -2, 1, 3, 2,
|
||||
-1, 2, 2, 2, 1, -1, 1),
|
||||
GROUP(
|
||||
/* SEL_SCIF0 [3] */
|
||||
FN_SEL_SCIF0_0, FN_SEL_SCIF0_1, FN_SEL_SCIF0_2,
|
||||
FN_SEL_SCIF0_3, FN_SEL_SCIF0_4,
|
||||
0, 0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_SCIF [1] */
|
||||
FN_SEL_SCIF_0, FN_SEL_SCIF_1,
|
||||
/* SEL_CAN0 [3] */
|
||||
@ -6479,13 +6451,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
/* SEL_CAN1 [2] */
|
||||
FN_SEL_CAN1_0, FN_SEL_CAN1_1, FN_SEL_CAN1_2, FN_SEL_CAN1_3,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_SCIFA2 [1] */
|
||||
FN_SEL_SCIFA2_0, FN_SEL_SCIFA2_1,
|
||||
/* SEL_SCIF4 [2] */
|
||||
FN_SEL_SCIF4_0, FN_SEL_SCIF4_1, FN_SEL_SCIF4_2, 0,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* SEL_ADG [1] */
|
||||
FN_SEL_ADG_0, FN_SEL_ADG_1,
|
||||
/* SEL_FM [3] */
|
||||
@ -6495,7 +6465,6 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
/* SEL_SCIFA5 [2] */
|
||||
FN_SEL_SCIFA5_0, FN_SEL_SCIFA5_1, FN_SEL_SCIFA5_2, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_GPS [2] */
|
||||
FN_SEL_GPS_0, FN_SEL_GPS_1, FN_SEL_GPS_2, FN_SEL_GPS_3,
|
||||
/* SEL_SCIFA4 [2] */
|
||||
@ -6505,13 +6474,12 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
/* SEL_SIM [1] */
|
||||
FN_SEL_SIM_0, FN_SEL_SIM_1,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_SSI8 [1] */
|
||||
FN_SEL_SSI8_0, FN_SEL_SSI8_1, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL3", 0xE6060098, 32,
|
||||
GROUP(2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2,
|
||||
3, 2, 2, 2, 1),
|
||||
GROUP(2, 2, 2, 2, 2, 2, 2, 2, 1, 1, -2, 2,
|
||||
3, 2, -5),
|
||||
GROUP(
|
||||
/* SEL_HSCIF2 [2] */
|
||||
FN_SEL_HSCIF2_0, FN_SEL_HSCIF2_1,
|
||||
@ -6536,7 +6504,6 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
/* SEL_SCIF5 [1] */
|
||||
FN_SEL_SCIF5_0, FN_SEL_SCIF5_1,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* SEL_I2C2 [2] */
|
||||
FN_SEL_I2C2_0, FN_SEL_I2C2_1, FN_SEL_I2C2_2, FN_SEL_I2C2_3,
|
||||
/* SEL_I2C1 [3] */
|
||||
@ -6545,16 +6512,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0,
|
||||
/* SEL_I2C0 [2] */
|
||||
FN_SEL_I2C0_0, FN_SEL_I2C0_1, FN_SEL_I2C0_2, 0,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0, ))
|
||||
/* RESERVED [5] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL4", 0xE606009C, 32,
|
||||
GROUP(3, 2, 2, 1, 1, 1, 1, 3, 2, 2, 3, 1,
|
||||
1, 1, 2, 2, 2, 2),
|
||||
GROUP(3, 2, 2, -1, 1, 1, 1, 3, -4, 3, -1,
|
||||
1, 1, 2, -6),
|
||||
GROUP(
|
||||
/* SEL_SOF1 [3] */
|
||||
FN_SEL_SOF1_0, FN_SEL_SOF1_1, FN_SEL_SOF1_2, FN_SEL_SOF1_3,
|
||||
@ -6565,7 +6527,6 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
/* SEL_DIS [2] */
|
||||
FN_SEL_DIS_0, FN_SEL_DIS_1, FN_SEL_DIS_2, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_RAD [1] */
|
||||
FN_SEL_RAD_0, FN_SEL_RAD_1,
|
||||
/* SEL_RCN [1] */
|
||||
@ -6577,27 +6538,19 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_SCIF2_3, FN_SEL_SCIF2_4,
|
||||
0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* SEL_SOF2 [3] */
|
||||
FN_SEL_SOF2_0, FN_SEL_SOF2_1, FN_SEL_SOF2_2,
|
||||
FN_SEL_SOF2_3, FN_SEL_SOF2_4,
|
||||
0, 0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_SSI1 [1] */
|
||||
FN_SEL_SSI1_0, FN_SEL_SSI1_1,
|
||||
/* SEL_SSI0 [1] */
|
||||
FN_SEL_SSI0_0, FN_SEL_SSI0_1,
|
||||
/* SEL_SSP [2] */
|
||||
FN_SEL_SSP_0, FN_SEL_SSP_1, FN_SEL_SSP_2, 0,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0, ))
|
||||
/* RESERVED [6] */ ))
|
||||
},
|
||||
{ },
|
||||
};
|
||||
|
@ -1999,16 +1999,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_0_1_FN, FN_IP0_1,
|
||||
GP_0_0_FN, FN_IP0_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR1", 0xE6060008, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR1", 0xE6060008, 32,
|
||||
GROUP(-9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP1_31_23 RESERVED */
|
||||
GP_1_22_FN, FN_DU1_CDE,
|
||||
GP_1_21_FN, FN_DU1_DISP,
|
||||
GP_1_20_FN, FN_DU1_EXODDF_DU1_ODDF_DISP_CDE,
|
||||
@ -2101,22 +2096,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_3_1_FN, FN_A17,
|
||||
GP_3_0_FN, FN_A16 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR4", 0xE6060014, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR4", 0xE6060014, 32,
|
||||
GROUP(-15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP4_31_17 RESERVED */
|
||||
GP_4_16_FN, FN_VI0_FIELD,
|
||||
GP_4_15_FN, FN_VI0_D11_G3_Y3,
|
||||
GP_4_14_FN, FN_VI0_D10_G2_Y2,
|
||||
@ -2135,22 +2119,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_4_1_FN, FN_VI0_CLKENB,
|
||||
GP_4_0_FN, FN_VI0_CLK ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR5", 0xE6060018, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR5", 0xE6060018, 32,
|
||||
GROUP(-15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP5_31_17 RESERVED */
|
||||
GP_5_16_FN, FN_VI1_FIELD,
|
||||
GP_5_15_FN, FN_VI1_D11_G3_Y3,
|
||||
GP_5_14_FN, FN_VI1_D10_G2_Y2,
|
||||
@ -2169,22 +2142,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_5_1_FN, FN_VI1_CLKENB,
|
||||
GP_5_0_FN, FN_VI1_CLK ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR6", 0xE606001C, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR6", 0xE606001C, 32,
|
||||
GROUP(-15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP6_31_17 RESERVED */
|
||||
GP_6_16_FN, FN_IP2_16,
|
||||
GP_6_15_FN, FN_IP2_15,
|
||||
GP_6_14_FN, FN_IP2_14,
|
||||
@ -2203,22 +2165,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_6_1_FN, FN_IP2_1,
|
||||
GP_6_0_FN, FN_IP2_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR7", 0xE6060020, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR7", 0xE6060020, 32,
|
||||
GROUP(-15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP7_31_17 RESERVED */
|
||||
GP_7_16_FN, FN_VI3_FIELD,
|
||||
GP_7_15_FN, FN_IP3_14,
|
||||
GP_7_14_FN, FN_VI3_D10_Y2,
|
||||
@ -2237,22 +2188,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_7_1_FN, FN_IP3_1,
|
||||
GP_7_0_FN, FN_IP3_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR8", 0xE6060024, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR8", 0xE6060024, 32,
|
||||
GROUP(-15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP8_31_17 RESERVED */
|
||||
GP_8_16_FN, FN_IP4_24,
|
||||
GP_8_15_FN, FN_IP4_23,
|
||||
GP_8_14_FN, FN_IP4_22,
|
||||
@ -2271,22 +2211,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_8_1_FN, FN_IP4_0,
|
||||
GP_8_0_FN, FN_VI4_CLK ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR9", 0xE6060028, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR9", 0xE6060028, 32,
|
||||
GROUP(-15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP9_31_17 RESERVED */
|
||||
GP_9_16_FN, FN_VI5_FIELD,
|
||||
GP_9_15_FN, FN_VI5_D11_Y3,
|
||||
GP_9_14_FN, FN_VI5_D10_Y2,
|
||||
@ -2374,15 +2303,12 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_11_0_FN, FN_IP7_1_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR0", 0xE6060040, 32,
|
||||
GROUP(4, 4,
|
||||
GROUP(-8,
|
||||
1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* IP0_31_28 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP0_27_24 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP0_31_24 [8] RESERVED */
|
||||
/* IP0_23 [1] */
|
||||
FN_DU0_DB7_C5, 0,
|
||||
/* IP0_22 [1] */
|
||||
@ -2433,17 +2359,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_DU0_DR0_DATA0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR1", 0xE6060044, 32,
|
||||
GROUP(4, 4,
|
||||
1, 1, 1, 1, 1, 1, 1, 1,
|
||||
GROUP(-9, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* IP1_31_28 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP1_27_24 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP1_23 [1] */
|
||||
0, 0,
|
||||
/* IP1_31_23 [9] RESERVED */
|
||||
/* IP1_22 [1] */
|
||||
FN_A25, FN_SSL,
|
||||
/* IP1_21 [1] */
|
||||
@ -2492,19 +2412,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_DU0_EXHSYNC_DU0_HSYNC, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR2", 0xE6060048, 32,
|
||||
GROUP(4, 4,
|
||||
4, 3, 1,
|
||||
GROUP(-15, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* IP2_31_28 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP2_27_24 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP2_23_20 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP2_19_17 [3] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP2_31_17 [15] RESERVED */
|
||||
/* IP2_16 [1] */
|
||||
FN_VI2_FIELD, FN_AVB_TXD2,
|
||||
/* IP2_15 [1] */
|
||||
@ -2541,21 +2453,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_VI2_CLK, FN_AVB_RX_CLK ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR3", 0xE606004C, 32,
|
||||
GROUP(4, 4,
|
||||
4, 4,
|
||||
1, 1, 1, 1, 1, 1, 1, 1,
|
||||
GROUP(-17, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* IP3_31_28 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP3_27_24 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP3_23_20 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP3_19_16 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP3_15 [1] */
|
||||
0, 0,
|
||||
/* IP3_31_15 [17] RESERVED */
|
||||
/* IP3_14 [1] */
|
||||
FN_VI3_D11_Y3, FN_AVB_AVTP_MATCH,
|
||||
/* IP3_13 [1] */
|
||||
@ -2588,14 +2489,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_VI3_CLK, FN_AVB_TX_CLK ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR4", 0xE6060050, 32,
|
||||
GROUP(4, 3, 1,
|
||||
1, 1, 1, 2, 2, 2,
|
||||
GROUP(-7, 1, 1, 1, 1, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 1, 2, 1, 1),
|
||||
GROUP(
|
||||
/* IP4_31_28 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP4_27_25 [3] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP4_31_25 [7] RESERVED */
|
||||
/* IP4_24 [1] */
|
||||
FN_VI4_FIELD, FN_VI3_D15_Y7,
|
||||
/* IP4_23 [1] */
|
||||
@ -2630,21 +2527,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_VI4_CLKENB, FN_VI0_D12_G4_Y4 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR5", 0xE6060054, 32,
|
||||
GROUP(4, 4,
|
||||
4, 4,
|
||||
4, 1, 1, 1, 1,
|
||||
GROUP(-20, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* IP5_31_28 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP5_27_24 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP5_23_20 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP5_19_16 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP5_15_12 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP5_31_12 [20] RESERVED */
|
||||
/* IP5_11 [1] */
|
||||
FN_VI5_D8_Y0, FN_VI1_D23_R7,
|
||||
/* IP5_10 [1] */
|
||||
@ -2671,19 +2557,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_VI5_CLKENB, FN_VI1_D12_G4_Y4_B ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR6", 0xE6060058, 32,
|
||||
GROUP(4, 4,
|
||||
4, 1, 2, 1,
|
||||
2, 2, 2, 2,
|
||||
GROUP(-13, 2, 1, 2, 2, 2, 2,
|
||||
1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* IP6_31_28 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP6_27_24 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP6_23_20 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP6_19 [1] */
|
||||
0, 0,
|
||||
/* IP6_31_19 [13] RESERVED */
|
||||
/* IP6_18_17 [2] */
|
||||
FN_DREQ1_N, FN_RX3, 0, 0,
|
||||
/* IP6_16 [1] */
|
||||
@ -2714,17 +2591,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_MSIOF0_SCK, FN_HSCK0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR7", 0xE606005C, 32,
|
||||
GROUP(4, 4,
|
||||
3, 1, 1, 1, 1, 1,
|
||||
GROUP(-11, 1, 1, 1, 1, 1,
|
||||
2, 2, 2, 2,
|
||||
1, 1, 2, 2, 2),
|
||||
GROUP(
|
||||
/* IP7_31_28 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP7_27_24 [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP7_23_21 [3] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP7_31_21 [11] RESERVED */
|
||||
/* IP7_20 [1] */
|
||||
FN_AUDIO_CLKB, 0,
|
||||
/* IP7_19 [1] */
|
||||
|
@ -4867,7 +4867,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR0", 0xE6060020, 32,
|
||||
GROUP(2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
1, 1, 1, 1, 2, -7, 1),
|
||||
GROUP(
|
||||
/* IP0_31_30 [2] */
|
||||
FN_D5, FN_SCIF4_RXD_B, FN_I2C0_SCL_D, 0,
|
||||
@ -4903,25 +4903,12 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_MMC_CLK, FN_SD2_CLK,
|
||||
/* IP0_9_8 [2] */
|
||||
FN_SD1_WP, FN_IRQ7, FN_CAN0_TX, 0,
|
||||
/* IP0_7 [1] */
|
||||
0, 0,
|
||||
/* IP0_6 [1] */
|
||||
0, 0,
|
||||
/* IP0_5 [1] */
|
||||
0, 0,
|
||||
/* IP0_4 [1] */
|
||||
0, 0,
|
||||
/* IP0_3 [1] */
|
||||
0, 0,
|
||||
/* IP0_2 [1] */
|
||||
0, 0,
|
||||
/* IP0_1 [1] */
|
||||
0, 0,
|
||||
/* IP0_7_1 [7] RESERVED */
|
||||
/* IP0_0 [1] */
|
||||
FN_SD1_CD, FN_CAN0_RX, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR1", 0xE6060024, 32,
|
||||
GROUP(2, 2, 1, 1, 1, 1, 2, 2, 2, 3, 2, 2,
|
||||
GROUP(2, 2, 1, 1, -1, 1, 2, 2, 2, 3, 2, 2,
|
||||
3, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* IP1_31_30 [2] */
|
||||
@ -4932,8 +4919,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_A4, FN_SCIFB0_TXD,
|
||||
/* IP1_26 [1] */
|
||||
FN_A3, FN_SCIFB0_SCK,
|
||||
/* IP1_25 [1] */
|
||||
0, 0,
|
||||
/* IP1_25 [1] RESERVED */
|
||||
/* IP1_24 [1] */
|
||||
FN_A1, FN_SCIFB1_TXD,
|
||||
/* IP1_23_22 [2] */
|
||||
@ -5160,12 +5146,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_DU0_EXVSYNC_DU0_VSYNC, FN_QSTB_QHE, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR7", 0xE606003C, 32,
|
||||
GROUP(1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(1, -1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP7_31 [1] */
|
||||
FN_DREQ0_N, FN_SCIFB1_RXD,
|
||||
/* IP7_30 [1] */
|
||||
0, 0,
|
||||
/* IP7_30 [1] RESERVED */
|
||||
/* IP7_29_27 [3] */
|
||||
FN_ETH_TXD0, FN_VI0_R2, FN_SCIF3_RXD_B, FN_I2C4_SCL_E,
|
||||
FN_AVB_GTX_CLK, FN_SSI_WS6_B, 0, 0,
|
||||
@ -5234,10 +5219,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_AVB_MDC, FN_SSI_SDATA6_B, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR9", 0xE6060044, 32,
|
||||
GROUP(1, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3),
|
||||
GROUP(-1, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP9_31 [1] */
|
||||
0, 0,
|
||||
/* IP9_31 [1] RESERVED */
|
||||
/* IP9_30_28 [3] */
|
||||
FN_SCIF1_SCK, FN_PWM3, FN_TCLK2, FN_DU1_DG5,
|
||||
FN_SSI_SDATA1_B, 0, 0, 0,
|
||||
@ -5307,10 +5291,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR11", 0xE606004C, 32,
|
||||
GROUP(2, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3),
|
||||
GROUP(-2, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3),
|
||||
GROUP(
|
||||
/* IP11_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP11_31_30 [2] RESERVED */
|
||||
/* IP11_29_27 [3] */
|
||||
FN_SSI_SDATA0, FN_MSIOF1_SCK_B, FN_PWM0_B, FN_ADICLK_B,
|
||||
0, 0, 0, 0,
|
||||
@ -5343,10 +5326,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR12", 0xE6060050, 32,
|
||||
GROUP(2, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3),
|
||||
GROUP(-2, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP12_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP12_31_30 [2] RESERVED */
|
||||
/* IP12_29_27 [3] */
|
||||
FN_SSI_SCK2, FN_HSCIF1_HTX_B, FN_VI1_DATA2, 0,
|
||||
FN_ATAG0_N, FN_ETH_RXD1_B, 0, 0,
|
||||
@ -5379,18 +5361,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, FN_DREQ1_N_B, 0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR13", 0xE6060054, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(-5, 3, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP13_31 [1] */
|
||||
0, 0,
|
||||
/* IP13_30 [1] */
|
||||
0, 0,
|
||||
/* IP13_29 [1] */
|
||||
0, 0,
|
||||
/* IP13_28 [1] */
|
||||
0, 0,
|
||||
/* IP13_27 [1] */
|
||||
0, 0,
|
||||
/* IP13_31_27 [5] RESERVED */
|
||||
/* IP13_26_24 [3] */
|
||||
FN_AUDIO_CLKOUT, FN_I2C4_SDA_B, FN_SCIFA5_TXD_D, FN_VI1_VSYNC_N,
|
||||
FN_TS_SPSYNC_C, 0, FN_FMIN_E, 0,
|
||||
@ -5420,23 +5393,21 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, FN_ATACS00_N, FN_ETH_LINK_B, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL", 0xE6060090, 32,
|
||||
GROUP(2, 1, 2, 3, 4, 1, 1, 3, 3, 3, 3, 3, 2, 1),
|
||||
GROUP(2, -1, 2, 3, -4, 1, -1,
|
||||
3, 3, 3, 3, 3, 2, -1),
|
||||
GROUP(
|
||||
/* SEL_ADG [2] */
|
||||
FN_SEL_ADG_0, FN_SEL_ADG_1, FN_SEL_ADG_2, FN_SEL_ADG_3,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_CAN [2] */
|
||||
FN_SEL_CAN_0, FN_SEL_CAN_1, FN_SEL_CAN_2, FN_SEL_CAN_3,
|
||||
/* SEL_DARC [3] */
|
||||
FN_SEL_DARC_0, FN_SEL_DARC_1, FN_SEL_DARC_2, FN_SEL_DARC_3,
|
||||
FN_SEL_DARC_4, 0, 0, 0,
|
||||
/* RESERVED [4] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* SEL_ETH [1] */
|
||||
FN_SEL_ETH_0, FN_SEL_ETH_1,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_IC200 [3] */
|
||||
FN_SEL_I2C00_0, FN_SEL_I2C00_1, FN_SEL_I2C00_2, FN_SEL_I2C00_3,
|
||||
FN_SEL_I2C00_4, 0, 0, 0,
|
||||
@ -5454,12 +5425,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_I2C04_4, 0, 0, 0,
|
||||
/* SEL_I2C05 [2] */
|
||||
FN_SEL_I2C05_0, FN_SEL_I2C05_1, FN_SEL_I2C05_2, FN_SEL_I2C05_3,
|
||||
/* RESERVED [1] */
|
||||
0, 0, ))
|
||||
/* RESERVED [1] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL2", 0xE6060094, 32,
|
||||
GROUP(2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1,
|
||||
2, 2, 1, 1, 2, 2, 2, 1, 1, 2),
|
||||
2, 2, -1, 1, 2, 2, 2, 1, 1, -2),
|
||||
GROUP(
|
||||
/* SEL_IEB [2] */
|
||||
FN_SEL_IEB_0, FN_SEL_IEB_1, FN_SEL_IEB_2, 0,
|
||||
@ -5493,7 +5463,6 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_SCIFA5_0, FN_SEL_SCIFA5_1, FN_SEL_SCIFA5_2,
|
||||
FN_SEL_SCIFA5_3,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* SEL_TMU [1] */
|
||||
FN_SEL_TMU_0, FN_SEL_TMU_1,
|
||||
/* SEL_TSIF0 [2] */
|
||||
@ -5506,12 +5475,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_HSCIF0_0, FN_SEL_HSCIF0_1,
|
||||
/* SEL_HSCIF1 [1] */
|
||||
FN_SEL_HSCIF1_0, FN_SEL_HSCIF1_1,
|
||||
/* RESERVED [2] */
|
||||
0, 0, 0, 0, ))
|
||||
/* RESERVED [2] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL3", 0xE6060098, 32,
|
||||
GROUP(2, 2, 2, 1, 3, 2, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
1, 1, -12),
|
||||
GROUP(
|
||||
/* SEL_SCIF0 [2] */
|
||||
FN_SEL_SCIF0_0, FN_SEL_SCIF0_1, FN_SEL_SCIF0_2, FN_SEL_SCIF0_3,
|
||||
@ -5542,30 +5510,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_SSI8_0, FN_SEL_SSI8_1,
|
||||
/* SEL_SSI9 [1] */
|
||||
FN_SEL_SSI9_0, FN_SEL_SSI9_1,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
0, 0, ))
|
||||
/* RESERVED [12] */ ))
|
||||
},
|
||||
{ },
|
||||
};
|
||||
|
@ -4701,23 +4701,11 @@ static const struct sh_pfc_function pinmux_functions[] = {
|
||||
static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) FN_##y
|
||||
#define FM(x) FN_##x
|
||||
{ PINMUX_CFG_REG("GPSR0", 0xe6060100, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR0", 0xe6060100, 32,
|
||||
GROUP(-16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP0_31_16 RESERVED */
|
||||
GP_0_15_FN, GPSR0_15,
|
||||
GP_0_14_FN, GPSR0_14,
|
||||
GP_0_13_FN, GPSR0_13,
|
||||
@ -4769,24 +4757,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_1_1_FN, GPSR1_1,
|
||||
GP_1_0_FN, GPSR1_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR2", 0xe6060108, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR2", 0xe6060108, 32,
|
||||
GROUP(-17, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP2_31_15 RESERVED */
|
||||
GP_2_14_FN, GPSR2_14,
|
||||
GP_2_13_FN, GPSR2_13,
|
||||
GP_2_12_FN, GPSR2_12,
|
||||
@ -4803,23 +4778,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_2_1_FN, GPSR2_1,
|
||||
GP_2_0_FN, GPSR2_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR3", 0xe606010c, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR3", 0xe606010c, 32,
|
||||
GROUP(-16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP3_31_16 RESERVED */
|
||||
GP_3_15_FN, GPSR3_15,
|
||||
GP_3_14_FN, GPSR3_14,
|
||||
GP_3_13_FN, GPSR3_13,
|
||||
@ -4837,21 +4800,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_3_1_FN, GPSR3_1,
|
||||
GP_3_0_FN, GPSR3_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR4", 0xe6060110, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR4", 0xe6060110, 32,
|
||||
GROUP(-14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP4_31_18 RESERVED */
|
||||
GP_4_17_FN, GPSR4_17,
|
||||
GP_4_16_FN, GPSR4_16,
|
||||
GP_4_15_FN, GPSR4_15,
|
||||
@ -4939,35 +4892,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_6_1_FN, GPSR6_1,
|
||||
GP_6_0_FN, GPSR6_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR7", 0xe606011c, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR7", 0xe606011c, 32,
|
||||
GROUP(-28, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP7_31_4 RESERVED */
|
||||
GP_7_3_FN, GPSR7_3,
|
||||
GP_7_2_FN, GPSR7_2,
|
||||
GP_7_1_FN, GPSR7_1,
|
||||
@ -5148,13 +5076,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP16_7_4
|
||||
IP16_3_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IPSR17", 0xe6060244, 32, 4, GROUP(
|
||||
/* IP17_31_28 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP17_27_24 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP17_23_20 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP17_19_16 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP17_15_12 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP17_11_8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("IPSR17", 0xe6060244, 32,
|
||||
GROUP(-24, 4, 4),
|
||||
GROUP(
|
||||
/* IP17_31_8 RESERVED */
|
||||
IP17_7_4
|
||||
IP17_3_0 ))
|
||||
},
|
||||
@ -5164,10 +5089,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) x,
|
||||
#define FM(x) FN_##x,
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL0", 0xe6060500, 32,
|
||||
GROUP(1, 2, 2, 3, 1, 1, 2, 1, 1, 1, 2, 1,
|
||||
1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1),
|
||||
GROUP(-1, 2, 2, 3, 1, 1, 2, 1, 1, 1, 2, 1,
|
||||
1, 1, 1, 1, 1, 1, 2, 2, 1, 2, -1),
|
||||
GROUP(
|
||||
0, 0, /* RESERVED 31 */
|
||||
/* RESERVED 31 */
|
||||
MOD_SEL0_30_29
|
||||
MOD_SEL0_28_27
|
||||
MOD_SEL0_26_25_24
|
||||
@ -5189,11 +5114,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL0_5_4
|
||||
MOD_SEL0_3
|
||||
MOD_SEL0_2_1
|
||||
0, 0, /* RESERVED 0 */ ))
|
||||
/* RESERVED 0 */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL1", 0xe6060504, 32,
|
||||
GROUP(2, 3, 1, 2, 3, 1, 1, 2, 1, 2, 1, 1,
|
||||
1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1),
|
||||
1, 1, 1, -2, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
MOD_SEL1_31_30
|
||||
MOD_SEL1_29_28_27
|
||||
@ -5210,7 +5135,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL1_11
|
||||
MOD_SEL1_10
|
||||
MOD_SEL1_9
|
||||
0, 0, 0, 0, /* RESERVED 8, 7 */
|
||||
/* RESERVED 8, 7 */
|
||||
MOD_SEL1_6
|
||||
MOD_SEL1_5
|
||||
MOD_SEL1_4
|
||||
@ -5220,35 +5145,12 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL1_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL2", 0xe6060508, 32,
|
||||
GROUP(1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 1, 2, 1),
|
||||
GROUP(1, 1, 1, -28, 1),
|
||||
GROUP(
|
||||
MOD_SEL2_31
|
||||
MOD_SEL2_30
|
||||
MOD_SEL2_29
|
||||
/* RESERVED 28 */
|
||||
0, 0,
|
||||
/* RESERVED 27, 26, 25, 24 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 23, 22, 21, 20 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 19, 18, 17, 16 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 15, 14, 13, 12 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 11, 10, 9, 8 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 7, 6, 5, 4 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 3 */
|
||||
0, 0,
|
||||
/* RESERVED 2, 1 */
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED 28-1 */
|
||||
MOD_SEL2_0 ))
|
||||
},
|
||||
{ },
|
||||
|
@ -5139,23 +5139,11 @@ static const struct {
|
||||
static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) FN_##y
|
||||
#define FM(x) FN_##x
|
||||
{ PINMUX_CFG_REG("GPSR0", 0xe6060100, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR0", 0xe6060100, 32,
|
||||
GROUP(-16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP0_31_16 RESERVED */
|
||||
GP_0_15_FN, GPSR0_15,
|
||||
GP_0_14_FN, GPSR0_14,
|
||||
GP_0_13_FN, GPSR0_13,
|
||||
@ -5207,24 +5195,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_1_1_FN, GPSR1_1,
|
||||
GP_1_0_FN, GPSR1_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR2", 0xe6060108, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR2", 0xe6060108, 32,
|
||||
GROUP(-17, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP2_31_15 RESERVED */
|
||||
GP_2_14_FN, GPSR2_14,
|
||||
GP_2_13_FN, GPSR2_13,
|
||||
GP_2_12_FN, GPSR2_12,
|
||||
@ -5241,23 +5216,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_2_1_FN, GPSR2_1,
|
||||
GP_2_0_FN, GPSR2_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR3", 0xe606010c, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR3", 0xe606010c, 32,
|
||||
GROUP(-16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP3_31_16 RESERVED */
|
||||
GP_3_15_FN, GPSR3_15,
|
||||
GP_3_14_FN, GPSR3_14,
|
||||
GP_3_13_FN, GPSR3_13,
|
||||
@ -5275,21 +5238,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_3_1_FN, GPSR3_1,
|
||||
GP_3_0_FN, GPSR3_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR4", 0xe6060110, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR4", 0xe6060110, 32,
|
||||
GROUP(-14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP4_31_18 RESERVED */
|
||||
GP_4_17_FN, GPSR4_17,
|
||||
GP_4_16_FN, GPSR4_16,
|
||||
GP_4_15_FN, GPSR4_15,
|
||||
@ -5377,35 +5330,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_6_1_FN, GPSR6_1,
|
||||
GP_6_0_FN, GPSR6_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR7", 0xe606011c, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR7", 0xe606011c, 32,
|
||||
GROUP(-28, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP7_31_4 RESERVED */
|
||||
GP_7_3_FN, GPSR7_3,
|
||||
GP_7_2_FN, GPSR7_2,
|
||||
GP_7_1_FN, GPSR7_1,
|
||||
@ -5486,12 +5414,14 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP6_7_4
|
||||
IP6_3_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IPSR7", 0xe606021c, 32, 4, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("IPSR7", 0xe606021c, 32,
|
||||
GROUP(4, 4, 4, 4, -4, 4, 4, 4),
|
||||
GROUP(
|
||||
IP7_31_28
|
||||
IP7_27_24
|
||||
IP7_23_20
|
||||
IP7_19_16
|
||||
/* IP7_15_12 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP7_15_12 RESERVED */
|
||||
IP7_11_8
|
||||
IP7_7_4
|
||||
IP7_3_0 ))
|
||||
@ -5596,13 +5526,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP17_7_4
|
||||
IP17_3_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IPSR18", 0xe6060248, 32, 4, GROUP(
|
||||
/* IP18_31_28 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_27_24 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_23_20 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_19_16 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_15_12 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_11_8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("IPSR18", 0xe6060248, 32,
|
||||
GROUP(-24, 4, 4),
|
||||
GROUP(
|
||||
/* IP18_31_8 RESERVED */
|
||||
IP18_7_4
|
||||
IP18_3_0 ))
|
||||
},
|
||||
@ -5612,8 +5539,8 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) x,
|
||||
#define FM(x) FN_##x,
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL0", 0xe6060500, 32,
|
||||
GROUP(3, 2, 3, 1, 1, 1, 1, 1, 2, 1, 1, 2,
|
||||
1, 1, 1, 2, 2, 1, 2, 3),
|
||||
GROUP(3, 2, 3, 1, 1, 1, 1, 1, 2, 1, -1, 2,
|
||||
1, 1, 1, 2, 2, 1, 2, -3),
|
||||
GROUP(
|
||||
MOD_SEL0_31_30_29
|
||||
MOD_SEL0_28_27
|
||||
@ -5625,7 +5552,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL0_19
|
||||
MOD_SEL0_18_17
|
||||
MOD_SEL0_16
|
||||
0, 0, /* RESERVED 15 */
|
||||
/* RESERVED 15 */
|
||||
MOD_SEL0_14_13
|
||||
MOD_SEL0_12
|
||||
MOD_SEL0_11
|
||||
@ -5634,12 +5561,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL0_7_6
|
||||
MOD_SEL0_5
|
||||
MOD_SEL0_4_3
|
||||
/* RESERVED 2, 1, 0 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
/* RESERVED 2, 1, 0 */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL1", 0xe6060504, 32,
|
||||
GROUP(2, 3, 1, 2, 3, 1, 1, 2, 1, 2, 1, 1,
|
||||
1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1),
|
||||
1, 1, 1, -2, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
MOD_SEL1_31_30
|
||||
MOD_SEL1_29_28_27
|
||||
@ -5656,7 +5582,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL1_11
|
||||
MOD_SEL1_10
|
||||
MOD_SEL1_9
|
||||
0, 0, 0, 0, /* RESERVED 8, 7 */
|
||||
/* RESERVED 8, 7 */
|
||||
MOD_SEL1_6
|
||||
MOD_SEL1_5
|
||||
MOD_SEL1_4
|
||||
@ -5666,8 +5592,8 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL1_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL2", 0xe6060508, 32,
|
||||
GROUP(1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1,
|
||||
1, 4, 4, 4, 3, 1),
|
||||
GROUP(1, 1, 1, 2, 1, 3, -1, 1, 1, 1, 1, 1,
|
||||
-16, 1),
|
||||
GROUP(
|
||||
MOD_SEL2_31
|
||||
MOD_SEL2_30
|
||||
@ -5676,25 +5602,12 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL2_26
|
||||
MOD_SEL2_25_24_23
|
||||
/* RESERVED 22 */
|
||||
0, 0,
|
||||
MOD_SEL2_21
|
||||
MOD_SEL2_20
|
||||
MOD_SEL2_19
|
||||
MOD_SEL2_18
|
||||
MOD_SEL2_17
|
||||
/* RESERVED 16 */
|
||||
0, 0,
|
||||
/* RESERVED 15, 14, 13, 12 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 11, 10, 9, 8 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 7, 6, 5, 4 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 3, 2, 1 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 16-1 */
|
||||
MOD_SEL2_0 ))
|
||||
},
|
||||
{ },
|
||||
|
@ -5094,23 +5094,11 @@ static const struct {
|
||||
static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) FN_##y
|
||||
#define FM(x) FN_##x
|
||||
{ PINMUX_CFG_REG("GPSR0", 0xe6060100, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR0", 0xe6060100, 32,
|
||||
GROUP(-16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP0_31_16 RESERVED */
|
||||
GP_0_15_FN, GPSR0_15,
|
||||
GP_0_14_FN, GPSR0_14,
|
||||
GP_0_13_FN, GPSR0_13,
|
||||
@ -5162,24 +5150,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_1_1_FN, GPSR1_1,
|
||||
GP_1_0_FN, GPSR1_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR2", 0xe6060108, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR2", 0xe6060108, 32,
|
||||
GROUP(-17, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP2_31_15 RESERVED */
|
||||
GP_2_14_FN, GPSR2_14,
|
||||
GP_2_13_FN, GPSR2_13,
|
||||
GP_2_12_FN, GPSR2_12,
|
||||
@ -5196,23 +5171,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_2_1_FN, GPSR2_1,
|
||||
GP_2_0_FN, GPSR2_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR3", 0xe606010c, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR3", 0xe606010c, 32,
|
||||
GROUP(-16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP3_31_16 RESERVED */
|
||||
GP_3_15_FN, GPSR3_15,
|
||||
GP_3_14_FN, GPSR3_14,
|
||||
GP_3_13_FN, GPSR3_13,
|
||||
@ -5230,21 +5193,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_3_1_FN, GPSR3_1,
|
||||
GP_3_0_FN, GPSR3_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR4", 0xe6060110, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR4", 0xe6060110, 32,
|
||||
GROUP(-14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP4_31_18 RESERVED */
|
||||
GP_4_17_FN, GPSR4_17,
|
||||
GP_4_16_FN, GPSR4_16,
|
||||
GP_4_15_FN, GPSR4_15,
|
||||
@ -5332,35 +5285,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_6_1_FN, GPSR6_1,
|
||||
GP_6_0_FN, GPSR6_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR7", 0xe606011c, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR7", 0xe606011c, 32,
|
||||
GROUP(-28, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP7_31_4 RESERVED */
|
||||
GP_7_3_FN, GPSR7_3,
|
||||
GP_7_2_FN, GPSR7_2,
|
||||
GP_7_1_FN, GPSR7_1,
|
||||
@ -5441,12 +5369,14 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP6_7_4
|
||||
IP6_3_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IPSR7", 0xe606021c, 32, 4, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("IPSR7", 0xe606021c, 32,
|
||||
GROUP(4, 4, 4, 4, -4, 4, 4, 4),
|
||||
GROUP(
|
||||
IP7_31_28
|
||||
IP7_27_24
|
||||
IP7_23_20
|
||||
IP7_19_16
|
||||
/* IP7_15_12 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP7_15_12 RESERVED */
|
||||
IP7_11_8
|
||||
IP7_7_4
|
||||
IP7_3_0 ))
|
||||
@ -5551,13 +5481,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP17_7_4
|
||||
IP17_3_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IPSR18", 0xe6060248, 32, 4, GROUP(
|
||||
/* IP18_31_28 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_27_24 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_23_20 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_19_16 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_15_12 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_11_8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("IPSR18", 0xe6060248, 32,
|
||||
GROUP(-24, 4, 4),
|
||||
GROUP(
|
||||
/* IP18_31_8 RESERVED */
|
||||
IP18_7_4
|
||||
IP18_3_0 ))
|
||||
},
|
||||
@ -5567,8 +5494,8 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) x,
|
||||
#define FM(x) FN_##x,
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL0", 0xe6060500, 32,
|
||||
GROUP(3, 2, 3, 1, 1, 1, 1, 1, 2, 1, 1, 2,
|
||||
1, 1, 1, 2, 2, 1, 2, 3),
|
||||
GROUP(3, 2, 3, 1, 1, 1, 1, 1, 2, 1, -1, 2,
|
||||
1, 1, 1, 2, 2, 1, 2, -3),
|
||||
GROUP(
|
||||
MOD_SEL0_31_30_29
|
||||
MOD_SEL0_28_27
|
||||
@ -5580,7 +5507,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL0_19
|
||||
MOD_SEL0_18_17
|
||||
MOD_SEL0_16
|
||||
0, 0, /* RESERVED 15 */
|
||||
/* RESERVED 15 */
|
||||
MOD_SEL0_14_13
|
||||
MOD_SEL0_12
|
||||
MOD_SEL0_11
|
||||
@ -5589,12 +5516,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL0_7_6
|
||||
MOD_SEL0_5
|
||||
MOD_SEL0_4_3
|
||||
/* RESERVED 2, 1, 0 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
/* RESERVED 2, 1, 0 */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL1", 0xe6060504, 32,
|
||||
GROUP(2, 3, 1, 2, 3, 1, 1, 2, 1, 2, 1, 1,
|
||||
1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1),
|
||||
1, 1, 1, -2, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
MOD_SEL1_31_30
|
||||
MOD_SEL1_29_28_27
|
||||
@ -5611,7 +5537,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL1_11
|
||||
MOD_SEL1_10
|
||||
MOD_SEL1_9
|
||||
0, 0, 0, 0, /* RESERVED 8, 7 */
|
||||
/* RESERVED 8, 7 */
|
||||
MOD_SEL1_6
|
||||
MOD_SEL1_5
|
||||
MOD_SEL1_4
|
||||
@ -5622,7 +5548,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL2", 0xe6060508, 32,
|
||||
GROUP(1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1,
|
||||
1, 4, 4, 4, 3, 1),
|
||||
-16, 1),
|
||||
GROUP(
|
||||
MOD_SEL2_31
|
||||
MOD_SEL2_30
|
||||
@ -5636,19 +5562,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL2_19
|
||||
MOD_SEL2_18
|
||||
MOD_SEL2_17
|
||||
/* RESERVED 16 */
|
||||
0, 0,
|
||||
/* RESERVED 15, 14, 13, 12 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 11, 10, 9, 8 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 7, 6, 5, 4 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 3, 2, 1 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 16-1 */
|
||||
MOD_SEL2_0 ))
|
||||
},
|
||||
{ },
|
||||
|
@ -5335,23 +5335,11 @@ static const struct {
|
||||
static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) FN_##y
|
||||
#define FM(x) FN_##x
|
||||
{ PINMUX_CFG_REG("GPSR0", 0xe6060100, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR0", 0xe6060100, 32,
|
||||
GROUP(-16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP0_31_16 RESERVED */
|
||||
GP_0_15_FN, GPSR0_15,
|
||||
GP_0_14_FN, GPSR0_14,
|
||||
GP_0_13_FN, GPSR0_13,
|
||||
@ -5403,24 +5391,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_1_1_FN, GPSR1_1,
|
||||
GP_1_0_FN, GPSR1_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR2", 0xe6060108, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR2", 0xe6060108, 32,
|
||||
GROUP(-17, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP2_31_15 RESERVED */
|
||||
GP_2_14_FN, GPSR2_14,
|
||||
GP_2_13_FN, GPSR2_13,
|
||||
GP_2_12_FN, GPSR2_12,
|
||||
@ -5437,23 +5412,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_2_1_FN, GPSR2_1,
|
||||
GP_2_0_FN, GPSR2_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR3", 0xe606010c, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR3", 0xe606010c, 32,
|
||||
GROUP(-16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP3_31_16 RESERVED */
|
||||
GP_3_15_FN, GPSR3_15,
|
||||
GP_3_14_FN, GPSR3_14,
|
||||
GP_3_13_FN, GPSR3_13,
|
||||
@ -5471,21 +5434,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_3_1_FN, GPSR3_1,
|
||||
GP_3_0_FN, GPSR3_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR4", 0xe6060110, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR4", 0xe6060110, 32,
|
||||
GROUP(-14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP4_31_18 RESERVED */
|
||||
GP_4_17_FN, GPSR4_17,
|
||||
GP_4_16_FN, GPSR4_16,
|
||||
GP_4_15_FN, GPSR4_15,
|
||||
@ -5573,35 +5526,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_6_1_FN, GPSR6_1,
|
||||
GP_6_0_FN, GPSR6_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR7", 0xe606011c, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR7", 0xe606011c, 32,
|
||||
GROUP(-28, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP7_31_4 RESERVED */
|
||||
GP_7_3_FN, GPSR7_3,
|
||||
GP_7_2_FN, GPSR7_2,
|
||||
GP_7_1_FN, GPSR7_1,
|
||||
@ -5682,12 +5610,14 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP6_7_4
|
||||
IP6_3_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IPSR7", 0xe606021c, 32, 4, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("IPSR7", 0xe606021c, 32,
|
||||
GROUP(4, 4, 4, 4, -4, 4, 4, 4),
|
||||
GROUP(
|
||||
IP7_31_28
|
||||
IP7_27_24
|
||||
IP7_23_20
|
||||
IP7_19_16
|
||||
/* IP7_15_12 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP7_15_12 RESERVED */
|
||||
IP7_11_8
|
||||
IP7_7_4
|
||||
IP7_3_0 ))
|
||||
@ -5792,13 +5722,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP17_7_4
|
||||
IP17_3_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IPSR18", 0xe6060248, 32, 4, GROUP(
|
||||
/* IP18_31_28 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_27_24 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_23_20 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_19_16 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_15_12 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP18_11_8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("IPSR18", 0xe6060248, 32,
|
||||
GROUP(-24, 4, 4),
|
||||
GROUP(
|
||||
/* IP18_31_8 RESERVED */
|
||||
IP18_7_4
|
||||
IP18_3_0 ))
|
||||
},
|
||||
@ -5808,8 +5735,8 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) x,
|
||||
#define FM(x) FN_##x,
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL0", 0xe6060500, 32,
|
||||
GROUP(3, 2, 3, 1, 1, 1, 1, 1, 2, 1, 1, 2,
|
||||
1, 1, 1, 2, 2, 1, 2, 3),
|
||||
GROUP(3, 2, 3, 1, 1, 1, 1, 1, 2, 1, -1, 2,
|
||||
1, 1, 1, 2, 2, 1, 2, -3),
|
||||
GROUP(
|
||||
MOD_SEL0_31_30_29
|
||||
MOD_SEL0_28_27
|
||||
@ -5821,7 +5748,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL0_19
|
||||
MOD_SEL0_18_17
|
||||
MOD_SEL0_16
|
||||
0, 0, /* RESERVED 15 */
|
||||
/* RESERVED 15 */
|
||||
MOD_SEL0_14_13
|
||||
MOD_SEL0_12
|
||||
MOD_SEL0_11
|
||||
@ -5830,12 +5757,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL0_7_6
|
||||
MOD_SEL0_5
|
||||
MOD_SEL0_4_3
|
||||
/* RESERVED 2, 1, 0 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
/* RESERVED 2, 1, 0 */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL1", 0xe6060504, 32,
|
||||
GROUP(2, 3, 1, 2, 3, 1, 1, 2, 1, 2, 1, 1,
|
||||
1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1),
|
||||
1, 1, 1, -2, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
MOD_SEL1_31_30
|
||||
MOD_SEL1_29_28_27
|
||||
@ -5852,7 +5778,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL1_11
|
||||
MOD_SEL1_10
|
||||
MOD_SEL1_9
|
||||
0, 0, 0, 0, /* RESERVED 8, 7 */
|
||||
/* RESERVED 8, 7 */
|
||||
MOD_SEL1_6
|
||||
MOD_SEL1_5
|
||||
MOD_SEL1_4
|
||||
@ -5863,7 +5789,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL2", 0xe6060508, 32,
|
||||
GROUP(1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1,
|
||||
1, 4, 4, 4, 3, 1),
|
||||
-16, 1),
|
||||
GROUP(
|
||||
MOD_SEL2_31
|
||||
MOD_SEL2_30
|
||||
@ -5877,19 +5803,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL2_19
|
||||
MOD_SEL2_18
|
||||
MOD_SEL2_17
|
||||
/* RESERVED 16 */
|
||||
0, 0,
|
||||
/* RESERVED 15, 14, 13, 12 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 11, 10, 9, 8 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 7, 6, 5, 4 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 3, 2, 1 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 16-1 */
|
||||
MOD_SEL2_0 ))
|
||||
},
|
||||
{ },
|
||||
|
@ -231,7 +231,6 @@
|
||||
#define IP8_19_16 FM(CANFD_CLK_A) FM(CLK_EXTFXR) FM(PWM4_B) FM(SPEEDIN_B) FM(SCIF_CLK_B) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP8_23_20 FM(DIGRF_CLKIN) FM(DIGRF_CLKEN_IN) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP8_27_24 FM(DIGRF_CLKOUT) FM(DIGRF_CLKEN_OUT) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP8_31_28 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
|
||||
#define PINMUX_GPSR \
|
||||
\
|
||||
@ -290,8 +289,7 @@ FM(IP8_11_8) IP8_11_8 \
|
||||
FM(IP8_15_12) IP8_15_12 \
|
||||
FM(IP8_19_16) IP8_19_16 \
|
||||
FM(IP8_23_20) IP8_23_20 \
|
||||
FM(IP8_27_24) IP8_27_24 \
|
||||
FM(IP8_31_28) IP8_31_28
|
||||
FM(IP8_27_24) IP8_27_24
|
||||
|
||||
/* MOD_SEL0 */ /* 0 */ /* 1 */
|
||||
#define MOD_SEL0_11 FM(SEL_I2C3_0) FM(SEL_I2C3_1)
|
||||
@ -2085,17 +2083,11 @@ static const struct sh_pfc_function pinmux_functions[] = {
|
||||
static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) FN_##y
|
||||
#define FM(x) FN_##x
|
||||
{ PINMUX_CFG_REG("GPSR0", 0xe6060100, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR0", 0xe6060100, 32,
|
||||
GROUP(-10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP0_31_22 RESERVED */
|
||||
GP_0_21_FN, GPSR0_21,
|
||||
GP_0_20_FN, GPSR0_20,
|
||||
GP_0_19_FN, GPSR0_19,
|
||||
@ -2153,22 +2145,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_1_1_FN, GPSR1_1,
|
||||
GP_1_0_FN, GPSR1_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR2", 0xe6060108, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR2", 0xe6060108, 32,
|
||||
GROUP(-15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP2_31_17 RESERVED */
|
||||
GP_2_16_FN, GPSR2_16,
|
||||
GP_2_15_FN, GPSR2_15,
|
||||
GP_2_14_FN, GPSR2_14,
|
||||
@ -2187,22 +2168,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_2_1_FN, GPSR2_1,
|
||||
GP_2_0_FN, GPSR2_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR3", 0xe606010c, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR3", 0xe606010c, 32,
|
||||
GROUP(-15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP3_31_17 RESERVED */
|
||||
GP_3_16_FN, GPSR3_16,
|
||||
GP_3_15_FN, GPSR3_15,
|
||||
GP_3_14_FN, GPSR3_14,
|
||||
@ -2221,33 +2191,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_3_1_FN, GPSR3_1,
|
||||
GP_3_0_FN, GPSR3_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR4", 0xe6060110, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR4", 0xe6060110, 32,
|
||||
GROUP(-26, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP4_31_6 RESERVED */
|
||||
GP_4_5_FN, GPSR4_5,
|
||||
GP_4_4_FN, GPSR4_4,
|
||||
GP_4_3_FN, GPSR4_3,
|
||||
@ -2255,24 +2202,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_4_1_FN, GPSR4_1,
|
||||
GP_4_0_FN, GPSR4_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR5", 0xe6060114, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR5", 0xe6060114, 32,
|
||||
GROUP(-17, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP5_31_15 RESERVED */
|
||||
GP_5_14_FN, GPSR5_14,
|
||||
GP_5_13_FN, GPSR5_13,
|
||||
GP_5_12_FN, GPSR5_12,
|
||||
@ -2374,8 +2308,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP7_7_4
|
||||
IP7_3_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IPSR8", 0xe6060220, 32, 4, GROUP(
|
||||
IP8_31_28
|
||||
{ PINMUX_CFG_REG_VAR("IPSR8", 0xe6060220, 32,
|
||||
GROUP(-4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* IP8_31_28 RESERVED */
|
||||
IP8_27_24
|
||||
IP8_23_20
|
||||
IP8_19_16
|
||||
@ -2390,19 +2326,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) x,
|
||||
#define FM(x) FN_##x,
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL0", 0xe6060500, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1),
|
||||
GROUP(-20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED 31, 30, 29, 28 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 27, 26, 25, 24 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 23, 22, 21, 20 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 19, 18, 17, 16 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 15, 14, 13, 12 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 31-12 */
|
||||
MOD_SEL0_11
|
||||
MOD_SEL0_10
|
||||
MOD_SEL0_9
|
||||
|
@ -278,9 +278,6 @@
|
||||
#define IP10_11_8 FM(FSO_CFE_0_N) F_(0, 0) F_(0, 0) FM(VI0_DATA22) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP10_15_12 FM(FSO_CFE_1_N) F_(0, 0) F_(0, 0) FM(VI0_DATA23) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP10_19_16 FM(FSO_TOE_N) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP10_23_20 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP10_27_24 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP10_31_28 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
|
||||
#define PINMUX_GPSR \
|
||||
\
|
||||
@ -340,9 +337,9 @@ FM(IP8_7_4) IP8_7_4 FM(IP9_7_4) IP9_7_4 FM(IP10_7_4) IP10_7_4 \
|
||||
FM(IP8_11_8) IP8_11_8 FM(IP9_11_8) IP9_11_8 FM(IP10_11_8) IP10_11_8 \
|
||||
FM(IP8_15_12) IP8_15_12 FM(IP9_15_12) IP9_15_12 FM(IP10_15_12) IP10_15_12 \
|
||||
FM(IP8_19_16) IP8_19_16 FM(IP9_19_16) IP9_19_16 FM(IP10_19_16) IP10_19_16 \
|
||||
FM(IP8_23_20) IP8_23_20 FM(IP9_23_20) IP9_23_20 FM(IP10_23_20) IP10_23_20 \
|
||||
FM(IP8_27_24) IP8_27_24 FM(IP9_27_24) IP9_27_24 FM(IP10_27_24) IP10_27_24 \
|
||||
FM(IP8_31_28) IP8_31_28 FM(IP9_31_28) IP9_31_28 FM(IP10_31_28) IP10_31_28
|
||||
FM(IP8_23_20) IP8_23_20 FM(IP9_23_20) IP9_23_20 \
|
||||
FM(IP8_27_24) IP8_27_24 FM(IP9_27_24) IP9_27_24 \
|
||||
FM(IP8_31_28) IP8_31_28 FM(IP9_31_28) IP9_31_28
|
||||
|
||||
/* MOD_SEL0 */ /* 0 */ /* 1 */
|
||||
#define MOD_SEL0_11 FM(SEL_CANFD0_0) FM(SEL_CANFD0_1)
|
||||
@ -2507,17 +2504,11 @@ static const struct sh_pfc_function pinmux_functions[] = {
|
||||
static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) FN_##y
|
||||
#define FM(x) FN_##x
|
||||
{ PINMUX_CFG_REG("GPSR0", 0xe6060100, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR0", 0xe6060100, 32,
|
||||
GROUP(-10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP0_31_22 RESERVED */
|
||||
GP_0_21_FN, GPSR0_21,
|
||||
GP_0_20_FN, GPSR0_20,
|
||||
GP_0_19_FN, GPSR0_19,
|
||||
@ -2609,22 +2600,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_2_1_FN, GPSR2_1,
|
||||
GP_2_0_FN, GPSR2_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR3", 0xe606010c, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR3", 0xe606010c, 32,
|
||||
GROUP(-15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP3_31_17 RESERVED */
|
||||
GP_3_16_FN, GPSR3_16,
|
||||
GP_3_15_FN, GPSR3_15,
|
||||
GP_3_14_FN, GPSR3_14,
|
||||
@ -2643,14 +2623,12 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_3_1_FN, GPSR3_1,
|
||||
GP_3_0_FN, GPSR3_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR4", 0xe6060110, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR4", 0xe6060110, 32,
|
||||
GROUP(-7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1),
|
||||
GROUP(
|
||||
/* GP4_31_25 RESERVED */
|
||||
GP_4_24_FN, GPSR4_24,
|
||||
GP_4_23_FN, GPSR4_23,
|
||||
GP_4_22_FN, GPSR4_22,
|
||||
@ -2677,24 +2655,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_4_1_FN, GPSR4_1,
|
||||
GP_4_0_FN, GPSR4_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR5", 0xe6060114, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR5", 0xe6060114, 32,
|
||||
GROUP(-17, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP5_31_15 RESERVED */
|
||||
GP_5_14_FN, GPSR5_14,
|
||||
GP_5_13_FN, GPSR5_13,
|
||||
GP_5_12_FN, GPSR5_12,
|
||||
@ -2816,10 +2781,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP9_7_4
|
||||
IP9_3_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IPSR10", 0xe6060228, 32, 4, GROUP(
|
||||
IP10_31_28
|
||||
IP10_27_24
|
||||
IP10_23_20
|
||||
{ PINMUX_CFG_REG_VAR("IPSR10", 0xe6060228, 32,
|
||||
GROUP(-12, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* IP10_31_20 RESERVED */
|
||||
IP10_19_16
|
||||
IP10_15_12
|
||||
IP10_11_8
|
||||
@ -2832,19 +2797,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) x,
|
||||
#define FM(x) FN_##x,
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL0", 0xe6060500, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1),
|
||||
GROUP(-20, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED 31, 30, 29, 28 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 27, 26, 25, 24 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 23, 22, 21, 20 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 19, 18, 17, 16 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 15, 14, 13, 12 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 31-12 */
|
||||
MOD_SEL0_11
|
||||
MOD_SEL0_10
|
||||
MOD_SEL0_9
|
||||
@ -2853,7 +2808,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL0_6
|
||||
MOD_SEL0_5
|
||||
MOD_SEL0_4
|
||||
0, 0,
|
||||
/* RESERVED 3 */
|
||||
MOD_SEL0_2
|
||||
MOD_SEL0_1
|
||||
MOD_SEL0_0 ))
|
||||
|
@ -22,12 +22,12 @@
|
||||
PORT_GP_CFG_18(0, fn, sfx, CFG_FLAGS), \
|
||||
PORT_GP_CFG_23(1, fn, sfx, CFG_FLAGS), \
|
||||
PORT_GP_CFG_26(2, fn, sfx, CFG_FLAGS), \
|
||||
PORT_GP_CFG_12(3, fn, sfx, CFG_FLAGS | SH_PFC_PIN_CFG_IO_VOLTAGE), \
|
||||
PORT_GP_CFG_12(3, fn, sfx, CFG_FLAGS | SH_PFC_PIN_CFG_IO_VOLTAGE | SH_PFC_PIN_CFG_DRIVE_STRENGTH), \
|
||||
PORT_GP_CFG_1(3, 12, fn, sfx, CFG_FLAGS), \
|
||||
PORT_GP_CFG_1(3, 13, fn, sfx, CFG_FLAGS), \
|
||||
PORT_GP_CFG_1(3, 14, fn, sfx, CFG_FLAGS), \
|
||||
PORT_GP_CFG_1(3, 15, fn, sfx, CFG_FLAGS), \
|
||||
PORT_GP_CFG_11(4, fn, sfx, CFG_FLAGS | SH_PFC_PIN_CFG_IO_VOLTAGE), \
|
||||
PORT_GP_CFG_11(4, fn, sfx, CFG_FLAGS | SH_PFC_PIN_CFG_IO_VOLTAGE | SH_PFC_PIN_CFG_DRIVE_STRENGTH), \
|
||||
PORT_GP_CFG_20(5, fn, sfx, CFG_FLAGS), \
|
||||
PORT_GP_CFG_9(6, fn, sfx, CFG_FLAGS), \
|
||||
PORT_GP_CFG_1(6, 9, fn, sfx, SH_PFC_PIN_CFG_PULL_UP), \
|
||||
@ -2827,16 +2827,6 @@ static const unsigned int qspi0_ctrl_pins[] = {
|
||||
static const unsigned int qspi0_ctrl_mux[] = {
|
||||
QSPI0_SPCLK_MARK, QSPI0_SSL_MARK,
|
||||
};
|
||||
static const unsigned int qspi0_data_pins[] = {
|
||||
/* QSPI0_MOSI_IO0, QSPI0_MISO_IO1 */
|
||||
RCAR_GP_PIN(2, 1), RCAR_GP_PIN(2, 2),
|
||||
/* QSPI0_IO2, QSPI0_IO3 */
|
||||
RCAR_GP_PIN(2, 3), RCAR_GP_PIN(2, 4),
|
||||
};
|
||||
static const unsigned int qspi0_data_mux[] = {
|
||||
QSPI0_MOSI_IO0_MARK, QSPI0_MISO_IO1_MARK,
|
||||
QSPI0_IO2_MARK, QSPI0_IO3_MARK,
|
||||
};
|
||||
/* - QSPI1 ------------------------------------------------------------------ */
|
||||
static const unsigned int qspi1_ctrl_pins[] = {
|
||||
/* QSPI1_SPCLK, QSPI1_SSL */
|
||||
@ -2845,16 +2835,51 @@ static const unsigned int qspi1_ctrl_pins[] = {
|
||||
static const unsigned int qspi1_ctrl_mux[] = {
|
||||
QSPI1_SPCLK_MARK, QSPI1_SSL_MARK,
|
||||
};
|
||||
static const unsigned int qspi1_data_pins[] = {
|
||||
/* QSPI1_MOSI_IO0, QSPI1_MISO_IO1 */
|
||||
|
||||
/* - RPC -------------------------------------------------------------------- */
|
||||
static const unsigned int rpc_clk_pins[] = {
|
||||
/* Octal-SPI flash: C/SCLK */
|
||||
/* HyperFlash: CK, CK# */
|
||||
RCAR_GP_PIN(2, 0), RCAR_GP_PIN(2, 6),
|
||||
};
|
||||
static const unsigned int rpc_clk_mux[] = {
|
||||
QSPI0_SPCLK_MARK, QSPI1_SPCLK_MARK,
|
||||
};
|
||||
static const unsigned int rpc_ctrl_pins[] = {
|
||||
/* Octal-SPI flash: S#/CS, DQS */
|
||||
/* HyperFlash: CS#, RDS */
|
||||
RCAR_GP_PIN(2, 5), RCAR_GP_PIN(2, 11),
|
||||
};
|
||||
static const unsigned int rpc_ctrl_mux[] = {
|
||||
QSPI0_SSL_MARK, QSPI1_SSL_MARK,
|
||||
};
|
||||
static const unsigned int rpc_data_pins[] = {
|
||||
/* DQ[0:7] */
|
||||
RCAR_GP_PIN(2, 1), RCAR_GP_PIN(2, 2),
|
||||
RCAR_GP_PIN(2, 3), RCAR_GP_PIN(2, 4),
|
||||
RCAR_GP_PIN(2, 7), RCAR_GP_PIN(2, 8),
|
||||
/* QSPI1_IO2, QSPI1_IO3 */
|
||||
RCAR_GP_PIN(2, 9), RCAR_GP_PIN(2, 10),
|
||||
};
|
||||
static const unsigned int qspi1_data_mux[] = {
|
||||
static const unsigned int rpc_data_mux[] = {
|
||||
QSPI0_MOSI_IO0_MARK, QSPI0_MISO_IO1_MARK,
|
||||
QSPI0_IO2_MARK, QSPI0_IO3_MARK,
|
||||
QSPI1_MOSI_IO0_MARK, QSPI1_MISO_IO1_MARK,
|
||||
QSPI1_IO2_MARK, QSPI1_IO3_MARK,
|
||||
};
|
||||
static const unsigned int rpc_reset_pins[] = {
|
||||
/* RPC_RESET# */
|
||||
RCAR_GP_PIN(2, 13),
|
||||
};
|
||||
static const unsigned int rpc_reset_mux[] = {
|
||||
RPC_RESET_N_MARK,
|
||||
};
|
||||
static const unsigned int rpc_int_pins[] = {
|
||||
/* RPC_INT# */
|
||||
RCAR_GP_PIN(2, 12),
|
||||
};
|
||||
static const unsigned int rpc_int_mux[] = {
|
||||
RPC_INT_N_MARK,
|
||||
};
|
||||
|
||||
/* - SCIF0 ------------------------------------------------------------------ */
|
||||
static const unsigned int scif0_data_a_pins[] = {
|
||||
@ -3758,7 +3783,7 @@ static const unsigned int vin5_clk_b_mux[] = {
|
||||
};
|
||||
|
||||
static const struct {
|
||||
struct sh_pfc_pin_group common[255];
|
||||
struct sh_pfc_pin_group common[261];
|
||||
#ifdef CONFIG_PINCTRL_PFC_R8A77990
|
||||
struct sh_pfc_pin_group automotive[22];
|
||||
#endif
|
||||
@ -3907,11 +3932,17 @@ static const struct {
|
||||
SH_PFC_PIN_GROUP(pwm6_a),
|
||||
SH_PFC_PIN_GROUP(pwm6_b),
|
||||
SH_PFC_PIN_GROUP(qspi0_ctrl),
|
||||
BUS_DATA_PIN_GROUP(qspi0_data, 2),
|
||||
BUS_DATA_PIN_GROUP(qspi0_data, 4),
|
||||
SH_PFC_PIN_GROUP_SUBSET(qspi0_data2, rpc_data, 0, 2),
|
||||
SH_PFC_PIN_GROUP_SUBSET(qspi0_data4, rpc_data, 0, 4),
|
||||
SH_PFC_PIN_GROUP(qspi1_ctrl),
|
||||
BUS_DATA_PIN_GROUP(qspi1_data, 2),
|
||||
BUS_DATA_PIN_GROUP(qspi1_data, 4),
|
||||
SH_PFC_PIN_GROUP_SUBSET(qspi1_data2, rpc_data, 4, 2),
|
||||
SH_PFC_PIN_GROUP_SUBSET(qspi1_data4, rpc_data, 4, 4),
|
||||
BUS_DATA_PIN_GROUP(rpc_clk, 1),
|
||||
BUS_DATA_PIN_GROUP(rpc_clk, 2),
|
||||
SH_PFC_PIN_GROUP(rpc_ctrl),
|
||||
SH_PFC_PIN_GROUP(rpc_data),
|
||||
SH_PFC_PIN_GROUP(rpc_reset),
|
||||
SH_PFC_PIN_GROUP(rpc_int),
|
||||
SH_PFC_PIN_GROUP(scif0_data_a),
|
||||
SH_PFC_PIN_GROUP(scif0_clk_a),
|
||||
SH_PFC_PIN_GROUP(scif0_ctrl_a),
|
||||
@ -4336,6 +4367,15 @@ static const char * const qspi1_groups[] = {
|
||||
"qspi1_data4",
|
||||
};
|
||||
|
||||
static const char * const rpc_groups[] = {
|
||||
"rpc_clk1",
|
||||
"rpc_clk2",
|
||||
"rpc_ctrl",
|
||||
"rpc_data",
|
||||
"rpc_reset",
|
||||
"rpc_int",
|
||||
};
|
||||
|
||||
static const char * const scif0_groups[] = {
|
||||
"scif0_data_a",
|
||||
"scif0_clk_a",
|
||||
@ -4492,7 +4532,7 @@ static const char * const vin5_groups[] = {
|
||||
};
|
||||
|
||||
static const struct {
|
||||
struct sh_pfc_function common[49];
|
||||
struct sh_pfc_function common[50];
|
||||
#ifdef CONFIG_PINCTRL_PFC_R8A77990
|
||||
struct sh_pfc_function automotive[5];
|
||||
#endif
|
||||
@ -4531,6 +4571,7 @@ static const struct {
|
||||
SH_PFC_FUNCTION(pwm6),
|
||||
SH_PFC_FUNCTION(qspi0),
|
||||
SH_PFC_FUNCTION(qspi1),
|
||||
SH_PFC_FUNCTION(rpc),
|
||||
SH_PFC_FUNCTION(scif0),
|
||||
SH_PFC_FUNCTION(scif1),
|
||||
SH_PFC_FUNCTION(scif2),
|
||||
@ -4562,21 +4603,11 @@ static const struct {
|
||||
static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) FN_##y
|
||||
#define FM(x) FN_##x
|
||||
{ PINMUX_CFG_REG("GPSR0", 0xe6060100, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR0", 0xe6060100, 32,
|
||||
GROUP(-14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP0_31_18 RESERVED */
|
||||
GP_0_17_FN, GPSR0_17,
|
||||
GP_0_16_FN, GPSR0_16,
|
||||
GP_0_15_FN, GPSR0_15,
|
||||
@ -4596,16 +4627,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_0_1_FN, GPSR0_1,
|
||||
GP_0_0_FN, GPSR0_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR1", 0xe6060104, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR1", 0xe6060104, 32,
|
||||
GROUP(-9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP1_31_23 RESERVED */
|
||||
GP_1_22_FN, GPSR1_22,
|
||||
GP_1_21_FN, GPSR1_21,
|
||||
GP_1_20_FN, GPSR1_20,
|
||||
@ -4664,23 +4690,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_2_1_FN, GPSR2_1,
|
||||
GP_2_0_FN, GPSR2_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR3", 0xe606010c, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR3", 0xe606010c, 32,
|
||||
GROUP(-16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP3_31_16 RESERVED */
|
||||
GP_3_15_FN, GPSR3_15,
|
||||
GP_3_14_FN, GPSR3_14,
|
||||
GP_3_13_FN, GPSR3_13,
|
||||
@ -4698,28 +4712,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_3_1_FN, GPSR3_1,
|
||||
GP_3_0_FN, GPSR3_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR4", 0xe6060110, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR4", 0xe6060110, 32,
|
||||
GROUP(-21, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP4_31_11 RESERVED */
|
||||
GP_4_10_FN, GPSR4_10,
|
||||
GP_4_9_FN, GPSR4_9,
|
||||
GP_4_8_FN, GPSR4_8,
|
||||
@ -4732,19 +4728,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_4_1_FN, GPSR4_1,
|
||||
GP_4_0_FN, GPSR4_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR5", 0xe6060114, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR5", 0xe6060114, 32,
|
||||
GROUP(-12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP5_31_20 RESERVED */
|
||||
GP_5_19_FN, GPSR5_19,
|
||||
GP_5_18_FN, GPSR5_18,
|
||||
GP_5_17_FN, GPSR5_17,
|
||||
@ -4766,21 +4754,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_5_1_FN, GPSR5_1,
|
||||
GP_5_0_FN, GPSR5_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR6", 0xe6060118, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR6", 0xe6060118, 32,
|
||||
GROUP(-14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP6_31_18 RESERVED */
|
||||
GP_6_17_FN, GPSR6_17,
|
||||
GP_6_16_FN, GPSR6_16,
|
||||
GP_6_15_FN, GPSR6_15,
|
||||
@ -4971,11 +4949,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) x,
|
||||
#define FM(x) FN_##x,
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL0", 0xe6060500, 32,
|
||||
GROUP(1, 2, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1,
|
||||
GROUP(-1, 2, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1,
|
||||
1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2),
|
||||
GROUP(
|
||||
/* RESERVED 31 */
|
||||
0, 0,
|
||||
MOD_SEL0_30_29
|
||||
MOD_SEL0_28
|
||||
MOD_SEL0_27_26
|
||||
@ -5000,15 +4977,14 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL0_1_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL1", 0xe6060504, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1,
|
||||
1, 2, 2, 2, 1, 1, 2, 1, 4),
|
||||
GROUP(1, 1, 1, 1, -1, 1, 1, 3, 3, 1, 1, 1,
|
||||
1, 2, 2, 2, 1, 1, 2, 1, -4),
|
||||
GROUP(
|
||||
MOD_SEL1_31
|
||||
MOD_SEL1_30
|
||||
MOD_SEL1_29
|
||||
MOD_SEL1_28
|
||||
/* RESERVED 27 */
|
||||
0, 0,
|
||||
MOD_SEL1_26
|
||||
MOD_SEL1_25
|
||||
MOD_SEL1_24_23_22
|
||||
@ -5024,12 +5000,44 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL1_7
|
||||
MOD_SEL1_6_5
|
||||
MOD_SEL1_4
|
||||
/* RESERVED 3, 2, 1, 0 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
/* RESERVED 3, 2, 1, 0 */ ))
|
||||
},
|
||||
{ },
|
||||
};
|
||||
|
||||
static const struct pinmux_drive_reg pinmux_drive_regs[] = {
|
||||
{ PINMUX_DRIVE_REG("DRVCTRL8", 0xe6060320) {
|
||||
{ RCAR_GP_PIN(3, 0), 18, 2 }, /* SD0_CLK */
|
||||
{ RCAR_GP_PIN(3, 1), 15, 2 }, /* SD0_CMD */
|
||||
{ RCAR_GP_PIN(3, 2), 12, 2 }, /* SD0_DAT0 */
|
||||
{ RCAR_GP_PIN(3, 3), 9, 2 }, /* SD0_DAT1 */
|
||||
{ RCAR_GP_PIN(3, 4), 6, 2 }, /* SD0_DAT2 */
|
||||
{ RCAR_GP_PIN(3, 5), 3, 2 }, /* SD0_DAT3 */
|
||||
{ RCAR_GP_PIN(3, 6), 0, 2 }, /* SD1_CLK */
|
||||
} },
|
||||
{ PINMUX_DRIVE_REG("DRVCTRL9", 0xe6060324) {
|
||||
{ RCAR_GP_PIN(3, 7), 29, 2 }, /* SD1_CMD */
|
||||
{ RCAR_GP_PIN(3, 8), 26, 2 }, /* SD1_DAT0 */
|
||||
{ RCAR_GP_PIN(3, 9), 23, 2 }, /* SD1_DAT1 */
|
||||
{ RCAR_GP_PIN(3, 10), 20, 2 }, /* SD1_DAT2 */
|
||||
{ RCAR_GP_PIN(3, 11), 17, 2 }, /* SD1_DAT3 */
|
||||
{ RCAR_GP_PIN(4, 0), 14, 2 }, /* SD3_CLK */
|
||||
{ RCAR_GP_PIN(4, 1), 11, 2 }, /* SD3_CMD */
|
||||
{ RCAR_GP_PIN(4, 2), 8, 2 }, /* SD3_DAT0 */
|
||||
{ RCAR_GP_PIN(4, 3), 5, 2 }, /* SD3_DAT1 */
|
||||
{ RCAR_GP_PIN(4, 4), 2, 2 }, /* SD3_DAT2 */
|
||||
} },
|
||||
{ PINMUX_DRIVE_REG("DRVCTRL10", 0xe6060328) {
|
||||
{ RCAR_GP_PIN(4, 5), 29, 2 }, /* SD3_DAT3 */
|
||||
{ RCAR_GP_PIN(4, 6), 26, 2 }, /* SD3_DAT4 */
|
||||
{ RCAR_GP_PIN(4, 7), 23, 2 }, /* SD3_DAT5 */
|
||||
{ RCAR_GP_PIN(4, 8), 20, 2 }, /* SD3_DAT6 */
|
||||
{ RCAR_GP_PIN(4, 9), 17, 2 }, /* SD3_DAT7 */
|
||||
{ RCAR_GP_PIN(4, 10), 14, 2 }, /* SD3_DS */
|
||||
} },
|
||||
{ },
|
||||
};
|
||||
|
||||
enum ioctrl_regs {
|
||||
POCCTRL0,
|
||||
TDSELCTRL,
|
||||
@ -5286,6 +5294,7 @@ const struct sh_pfc_soc_info r8a774c0_pinmux_info = {
|
||||
.nr_functions = ARRAY_SIZE(pinmux_functions.common),
|
||||
|
||||
.cfg_regs = pinmux_config_regs,
|
||||
.drive_regs = pinmux_drive_regs,
|
||||
.bias_regs = pinmux_bias_regs,
|
||||
.ioctrl_regs = pinmux_ioctrl_regs,
|
||||
|
||||
@ -5312,6 +5321,7 @@ const struct sh_pfc_soc_info r8a77990_pinmux_info = {
|
||||
ARRAY_SIZE(pinmux_functions.automotive),
|
||||
|
||||
.cfg_regs = pinmux_config_regs,
|
||||
.drive_regs = pinmux_drive_regs,
|
||||
.bias_regs = pinmux_bias_regs,
|
||||
.ioctrl_regs = pinmux_ioctrl_regs,
|
||||
|
||||
|
@ -1682,6 +1682,68 @@ static const unsigned int pwm3_c_mux[] = {
|
||||
PWM3_C_MARK,
|
||||
};
|
||||
|
||||
/* - QSPI0 ------------------------------------------------------------------ */
|
||||
static const unsigned int qspi0_ctrl_pins[] = {
|
||||
/* QSPI0_SPCLK, QSPI0_SSL */
|
||||
RCAR_GP_PIN(6, 0), RCAR_GP_PIN(6, 5),
|
||||
};
|
||||
static const unsigned int qspi0_ctrl_mux[] = {
|
||||
QSPI0_SPCLK_MARK, QSPI0_SSL_MARK,
|
||||
};
|
||||
/* - QSPI1 ------------------------------------------------------------------ */
|
||||
static const unsigned int qspi1_ctrl_pins[] = {
|
||||
/* QSPI1_SPCLK, QSPI1_SSL */
|
||||
RCAR_GP_PIN(6, 6), RCAR_GP_PIN(6, 11),
|
||||
};
|
||||
static const unsigned int qspi1_ctrl_mux[] = {
|
||||
QSPI1_SPCLK_MARK, QSPI1_SSL_MARK,
|
||||
};
|
||||
|
||||
/* - RPC -------------------------------------------------------------------- */
|
||||
static const unsigned int rpc_clk_pins[] = {
|
||||
/* Octal-SPI flash: C/SCLK */
|
||||
/* HyperFlash: CK, CK# */
|
||||
RCAR_GP_PIN(6, 0), RCAR_GP_PIN(6, 6),
|
||||
};
|
||||
static const unsigned int rpc_clk_mux[] = {
|
||||
QSPI0_SPCLK_MARK, QSPI1_SPCLK_MARK,
|
||||
};
|
||||
static const unsigned int rpc_ctrl_pins[] = {
|
||||
/* Octal-SPI flash: S#/CS, DQS */
|
||||
/* HyperFlash: CS#, RDS */
|
||||
RCAR_GP_PIN(6, 5), RCAR_GP_PIN(6, 11),
|
||||
};
|
||||
static const unsigned int rpc_ctrl_mux[] = {
|
||||
QSPI0_SSL_MARK, QSPI1_SSL_MARK,
|
||||
};
|
||||
static const unsigned int rpc_data_pins[] = {
|
||||
/* DQ[0:7] */
|
||||
RCAR_GP_PIN(6, 1), RCAR_GP_PIN(6, 2),
|
||||
RCAR_GP_PIN(6, 3), RCAR_GP_PIN(6, 4),
|
||||
RCAR_GP_PIN(6, 7), RCAR_GP_PIN(6, 8),
|
||||
RCAR_GP_PIN(6, 9), RCAR_GP_PIN(6, 10),
|
||||
};
|
||||
static const unsigned int rpc_data_mux[] = {
|
||||
QSPI0_MOSI_IO0_MARK, QSPI0_MISO_IO1_MARK,
|
||||
QSPI0_IO2_MARK, QSPI0_IO3_MARK,
|
||||
QSPI1_MOSI_IO0_MARK, QSPI1_MISO_IO1_MARK,
|
||||
QSPI1_IO2_MARK, QSPI1_IO3_MARK,
|
||||
};
|
||||
static const unsigned int rpc_reset_pins[] = {
|
||||
/* RPC_RESET# */
|
||||
RCAR_GP_PIN(6, 12),
|
||||
};
|
||||
static const unsigned int rpc_reset_mux[] = {
|
||||
RPC_RESET_N_MARK,
|
||||
};
|
||||
static const unsigned int rpc_int_pins[] = {
|
||||
/* RPC_INT# */
|
||||
RCAR_GP_PIN(6, 13),
|
||||
};
|
||||
static const unsigned int rpc_int_mux[] = {
|
||||
RPC_INT_N_MARK,
|
||||
};
|
||||
|
||||
/* - SCIF0 ------------------------------------------------------------------ */
|
||||
static const unsigned int scif0_data_a_pins[] = {
|
||||
/* RX, TX */
|
||||
@ -2085,6 +2147,18 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
|
||||
SH_PFC_PIN_GROUP(pwm3_a),
|
||||
SH_PFC_PIN_GROUP(pwm3_b),
|
||||
SH_PFC_PIN_GROUP(pwm3_c),
|
||||
SH_PFC_PIN_GROUP(qspi0_ctrl),
|
||||
SH_PFC_PIN_GROUP_SUBSET(qspi0_data2, rpc_data, 0, 2),
|
||||
SH_PFC_PIN_GROUP_SUBSET(qspi0_data4, rpc_data, 0, 4),
|
||||
SH_PFC_PIN_GROUP(qspi1_ctrl),
|
||||
SH_PFC_PIN_GROUP_SUBSET(qspi1_data2, rpc_data, 4, 2),
|
||||
SH_PFC_PIN_GROUP_SUBSET(qspi1_data4, rpc_data, 4, 4),
|
||||
BUS_DATA_PIN_GROUP(rpc_clk, 1),
|
||||
BUS_DATA_PIN_GROUP(rpc_clk, 2),
|
||||
SH_PFC_PIN_GROUP(rpc_ctrl),
|
||||
SH_PFC_PIN_GROUP(rpc_data),
|
||||
SH_PFC_PIN_GROUP(rpc_reset),
|
||||
SH_PFC_PIN_GROUP(rpc_int),
|
||||
SH_PFC_PIN_GROUP(scif0_data_a),
|
||||
SH_PFC_PIN_GROUP(scif0_clk_a),
|
||||
SH_PFC_PIN_GROUP(scif0_data_b),
|
||||
@ -2277,6 +2351,27 @@ static const char * const pwm3_groups[] = {
|
||||
"pwm3_c",
|
||||
};
|
||||
|
||||
static const char * const qspi0_groups[] = {
|
||||
"qspi0_ctrl",
|
||||
"qspi0_data2",
|
||||
"qspi0_data4",
|
||||
};
|
||||
|
||||
static const char * const qspi1_groups[] = {
|
||||
"qspi1_ctrl",
|
||||
"qspi1_data2",
|
||||
"qspi1_data4",
|
||||
};
|
||||
|
||||
static const char * const rpc_groups[] = {
|
||||
"rpc_clk1",
|
||||
"rpc_clk2",
|
||||
"rpc_ctrl",
|
||||
"rpc_data",
|
||||
"rpc_reset",
|
||||
"rpc_int",
|
||||
};
|
||||
|
||||
static const char * const scif0_groups[] = {
|
||||
"scif0_data_a",
|
||||
"scif0_clk_a",
|
||||
@ -2373,6 +2468,9 @@ static const struct sh_pfc_function pinmux_functions[] = {
|
||||
SH_PFC_FUNCTION(pwm1),
|
||||
SH_PFC_FUNCTION(pwm2),
|
||||
SH_PFC_FUNCTION(pwm3),
|
||||
SH_PFC_FUNCTION(qspi0),
|
||||
SH_PFC_FUNCTION(qspi1),
|
||||
SH_PFC_FUNCTION(rpc),
|
||||
SH_PFC_FUNCTION(scif0),
|
||||
SH_PFC_FUNCTION(scif1),
|
||||
SH_PFC_FUNCTION(scif2),
|
||||
@ -2388,30 +2486,10 @@ static const struct sh_pfc_function pinmux_functions[] = {
|
||||
static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) FN_##y
|
||||
#define FM(x) FN_##x
|
||||
{ PINMUX_CFG_REG("GPSR0", 0xe6060100, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR0", 0xe6060100, 32,
|
||||
GROUP(-23, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP0_31_9 RESERVED */
|
||||
GP_0_8_FN, GPSR0_8,
|
||||
GP_0_7_FN, GPSR0_7,
|
||||
GP_0_6_FN, GPSR0_6,
|
||||
@ -2490,29 +2568,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_2_1_FN, GPSR2_1,
|
||||
GP_2_0_FN, GPSR2_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR3", 0xe606010c, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR3", 0xe606010c, 32,
|
||||
GROUP(-22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP3_31_10 RESERVED */
|
||||
GP_3_9_FN, GPSR3_9,
|
||||
GP_3_8_FN, GPSR3_8,
|
||||
GP_3_7_FN, GPSR3_7,
|
||||
@ -2558,18 +2617,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_4_1_FN, GPSR4_1,
|
||||
GP_4_0_FN, GPSR4_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR5", 0xe6060114, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR5", 0xe6060114, 32,
|
||||
GROUP(-11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP5_31_21 RESERVED */
|
||||
GP_5_20_FN, GPSR5_20,
|
||||
GP_5_19_FN, GPSR5_19,
|
||||
GP_5_18_FN, GPSR5_18,
|
||||
@ -2592,25 +2644,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_5_1_FN, GPSR5_1,
|
||||
GP_5_0_FN, GPSR5_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR6", 0xe6060118, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR6", 0xe6060118, 32,
|
||||
GROUP(-18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1),
|
||||
GROUP(
|
||||
/* GP6_31_14 RESERVED */
|
||||
GP_6_13_FN, GPSR6_13,
|
||||
GP_6_12_FN, GPSR6_12,
|
||||
GP_6_11_FN, GPSR6_11,
|
||||
@ -2761,13 +2799,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP12_7_4
|
||||
IP12_3_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IPSR13", 0xe6060234, 32, 4, GROUP(
|
||||
/* IP13_31_28 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP13_27_24 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP13_23_20 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP13_19_16 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP13_15_12 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP13_11_8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("IPSR13", 0xe6060234, 32,
|
||||
GROUP(-24, 4, 4),
|
||||
GROUP(
|
||||
/* IP13_31_8 RESERVED */
|
||||
IP13_7_4
|
||||
IP13_3_0 ))
|
||||
},
|
||||
@ -2777,11 +2812,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) x,
|
||||
#define FM(x) FN_##x,
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL0", 0xe6060500, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1,
|
||||
1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(-1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, -1,
|
||||
1, 1, 1, 1, 1, 1, -4, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED 31 */
|
||||
0, 0,
|
||||
MOD_SEL0_30
|
||||
MOD_SEL0_29
|
||||
MOD_SEL0_28
|
||||
@ -2793,7 +2827,6 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL0_20_19
|
||||
MOD_SEL0_18_17
|
||||
/* RESERVED 16 */
|
||||
0, 0,
|
||||
MOD_SEL0_15
|
||||
MOD_SEL0_14
|
||||
MOD_SEL0_13
|
||||
@ -2801,7 +2834,6 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL0_11
|
||||
MOD_SEL0_10
|
||||
/* RESERVED 9, 8, 7, 6 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
MOD_SEL0_5
|
||||
MOD_SEL0_4
|
||||
MOD_SEL0_3
|
||||
@ -2810,7 +2842,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL0_0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL1", 0xe6060504, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(1, 1, 1, 1, 1, 1, -26),
|
||||
GROUP(
|
||||
MOD_SEL1_31
|
||||
MOD_SEL1_30
|
||||
@ -2818,20 +2850,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL1_28
|
||||
MOD_SEL1_27
|
||||
MOD_SEL1_26
|
||||
/* RESERVED 25, 24 */
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED 23, 22, 21, 20 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 19, 18, 17, 16 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 15, 14, 13, 12 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 11, 10, 9, 8 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 7, 6, 5, 4 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 3, 2, 1, 0 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
/* RESERVED 25-0 */ ))
|
||||
},
|
||||
{ },
|
||||
};
|
||||
|
@ -389,7 +389,6 @@
|
||||
#define IP3SR1_19_16 FM(GP1_28) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) FM(D0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP3SR1_23_20 FM(GP1_29) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) FM(D1) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP3SR1_27_24 FM(GP1_30) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) FM(D2) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP3SR1_31_28 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
|
||||
/* IP0SR2 */ /* 0 */ /* 1 */ /* 2 */ /* 3 */ /* 4 */ /* 5 */ /* 6 - F */
|
||||
#define IP0SR2_3_0 FM(IPC_CLKIN) FM(IPC_CLKEN_IN) F_(0, 0) F_(0, 0) FM(DU_DOTCLKIN) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
@ -420,11 +419,8 @@
|
||||
#define IP2SR2_31_28 FM(TCLK1_A) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) FM(EX_WAIT0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
|
||||
/* IP0SR3 */ /* 0 */ /* 1 */ /* 2 */ /* 3 */ /* 4 */ /* 5 */ /* 6 - F */
|
||||
#define IP0SR3_3_0 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP0SR3_7_4 FM(CANFD0_TX) FM(FXR_TXDA_B) FM(TX1_B) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP0SR3_11_8 FM(CANFD0_RX) FM(RXDA_EXTFXR_B) FM(RX1_B) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP0SR3_15_12 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP0SR3_19_16 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP0SR3_23_20 FM(CANFD2_TX) FM(TPU0TO2) FM(PWM0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP0SR3_27_24 FM(CANFD2_RX) FM(TPU0TO3) FM(PWM1) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP0SR3_31_28 FM(CANFD3_TX) F_(0, 0) FM(PWM2) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
@ -435,8 +431,6 @@
|
||||
#define IP1SR3_15_12 FM(CANFD5_TX) F_(0, 0) F_(0, 0) FM(FXR_TXENA_N) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP1SR3_19_16 FM(CANFD5_RX) F_(0, 0) F_(0, 0) FM(FXR_TXENB_N) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP1SR3_23_20 FM(CANFD6_TX) F_(0, 0) F_(0, 0) FM(STPWT_EXTFXR) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP1SR3_27_24 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP1SR3_31_28 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
|
||||
/* IP0SR4 */ /* 0 */ /* 1 */ /* 2 */ /* 3 */ /* 4 */ /* 5 */ /* 6 - F */
|
||||
#define IP0SR4_3_0 FM(AVB0_RX_CTL) FM(AVB0_MII_RX_DV) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
@ -457,14 +451,10 @@
|
||||
#define IP1SR4_27_24 FM(AVB0_MDC) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP1SR4_31_28 FM(AVB0_MAGIC) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
/* IP2SR4 */ /* 0 */ /* 1 */ /* 2 */ /* 3 */ /* 4 */ /* 5 */ /* 6 - F */
|
||||
#define IP2SR4_3_0 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR4_7_4 FM(AVB0_LINK) FM(AVB0_MII_TX_ER) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR4_11_8 FM(AVB0_AVTP_MATCH) FM(AVB0_MII_RX_ER) FM(CC5_OSCOUT) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR4_15_12 FM(AVB0_AVTP_CAPTURE) FM(AVB0_MII_CRS) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR4_19_16 FM(AVB0_AVTP_PPS) FM(AVB0_MII_COL) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR4_23_20 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR4_27_24 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR4_31_28 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
|
||||
/* IP0SR5 */ /* 0 */ /* 1 */ /* 2 */ /* 3 */ /* 4 */ /* 5 */ /* 6 - F */
|
||||
#define IP0SR5_3_0 FM(AVB1_RX_CTL) FM(AVB1_MII_RX_DV) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
@ -485,14 +475,10 @@
|
||||
#define IP1SR5_27_24 FM(AVB1_MDC) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP1SR5_31_28 FM(AVB1_MAGIC) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
/* IP2SR5 */ /* 0 */ /* 1 */ /* 2 */ /* 3 */ /* 4 */ /* 5 */ /* 6 - F */
|
||||
#define IP2SR5_3_0 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR5_7_4 FM(AVB1_LINK) FM(AVB1_MII_TX_ER) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR5_11_8 FM(AVB1_AVTP_MATCH) FM(AVB1_MII_RX_ER) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR5_15_12 FM(AVB1_AVTP_CAPTURE) FM(AVB1_MII_CRS) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR5_19_16 FM(AVB1_AVTP_PPS) FM(AVB1_MII_COL) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR5_23_20 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR5_27_24 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR5_31_28 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
|
||||
#define PINMUX_GPSR \
|
||||
\
|
||||
@ -537,7 +523,7 @@ FM(IP0SR1_15_12) IP0SR1_15_12 FM(IP1SR1_15_12) IP1SR1_15_12 FM(IP2SR1_15_12) IP2
|
||||
FM(IP0SR1_19_16) IP0SR1_19_16 FM(IP1SR1_19_16) IP1SR1_19_16 FM(IP2SR1_19_16) IP2SR1_19_16 FM(IP3SR1_19_16) IP3SR1_19_16 \
|
||||
FM(IP0SR1_23_20) IP0SR1_23_20 FM(IP1SR1_23_20) IP1SR1_23_20 FM(IP2SR1_23_20) IP2SR1_23_20 FM(IP3SR1_23_20) IP3SR1_23_20 \
|
||||
FM(IP0SR1_27_24) IP0SR1_27_24 FM(IP1SR1_27_24) IP1SR1_27_24 FM(IP2SR1_27_24) IP2SR1_27_24 FM(IP3SR1_27_24) IP3SR1_27_24 \
|
||||
FM(IP0SR1_31_28) IP0SR1_31_28 FM(IP1SR1_31_28) IP1SR1_31_28 FM(IP2SR1_31_28) IP2SR1_31_28 FM(IP3SR1_31_28) IP3SR1_31_28 \
|
||||
FM(IP0SR1_31_28) IP0SR1_31_28 FM(IP1SR1_31_28) IP1SR1_31_28 FM(IP2SR1_31_28) IP2SR1_31_28 \
|
||||
\
|
||||
FM(IP0SR2_3_0) IP0SR2_3_0 FM(IP1SR2_3_0) IP1SR2_3_0 FM(IP2SR2_3_0) IP2SR2_3_0 \
|
||||
FM(IP0SR2_7_4) IP0SR2_7_4 FM(IP1SR2_7_4) IP1SR2_7_4 FM(IP2SR2_7_4) IP2SR2_7_4 \
|
||||
@ -548,32 +534,32 @@ FM(IP0SR2_23_20) IP0SR2_23_20 FM(IP1SR2_23_20) IP1SR2_23_20 FM(IP2SR2_23_20) IP2
|
||||
FM(IP0SR2_27_24) IP0SR2_27_24 FM(IP1SR2_27_24) IP1SR2_27_24 FM(IP2SR2_27_24) IP2SR2_27_24 \
|
||||
FM(IP0SR2_31_28) IP0SR2_31_28 FM(IP1SR2_31_28) IP1SR2_31_28 FM(IP2SR2_31_28) IP2SR2_31_28 \
|
||||
\
|
||||
FM(IP0SR3_3_0) IP0SR3_3_0 FM(IP1SR3_3_0) IP1SR3_3_0 \
|
||||
FM(IP1SR3_3_0) IP1SR3_3_0 \
|
||||
FM(IP0SR3_7_4) IP0SR3_7_4 FM(IP1SR3_7_4) IP1SR3_7_4 \
|
||||
FM(IP0SR3_11_8) IP0SR3_11_8 FM(IP1SR3_11_8) IP1SR3_11_8 \
|
||||
FM(IP0SR3_15_12) IP0SR3_15_12 FM(IP1SR3_15_12) IP1SR3_15_12 \
|
||||
FM(IP0SR3_19_16) IP0SR3_19_16 FM(IP1SR3_19_16) IP1SR3_19_16 \
|
||||
FM(IP1SR3_15_12) IP1SR3_15_12 \
|
||||
FM(IP1SR3_19_16) IP1SR3_19_16 \
|
||||
FM(IP0SR3_23_20) IP0SR3_23_20 FM(IP1SR3_23_20) IP1SR3_23_20 \
|
||||
FM(IP0SR3_27_24) IP0SR3_27_24 FM(IP1SR3_27_24) IP1SR3_27_24 \
|
||||
FM(IP0SR3_31_28) IP0SR3_31_28 FM(IP1SR3_31_28) IP1SR3_31_28 \
|
||||
FM(IP0SR3_27_24) IP0SR3_27_24 \
|
||||
FM(IP0SR3_31_28) IP0SR3_31_28 \
|
||||
\
|
||||
FM(IP0SR4_3_0) IP0SR4_3_0 FM(IP1SR4_3_0) IP1SR4_3_0 FM(IP2SR4_3_0) IP2SR4_3_0 \
|
||||
FM(IP0SR4_3_0) IP0SR4_3_0 FM(IP1SR4_3_0) IP1SR4_3_0 \
|
||||
FM(IP0SR4_7_4) IP0SR4_7_4 FM(IP1SR4_7_4) IP1SR4_7_4 FM(IP2SR4_7_4) IP2SR4_7_4 \
|
||||
FM(IP0SR4_11_8) IP0SR4_11_8 FM(IP1SR4_11_8) IP1SR4_11_8 FM(IP2SR4_11_8) IP2SR4_11_8 \
|
||||
FM(IP0SR4_15_12) IP0SR4_15_12 FM(IP1SR4_15_12) IP1SR4_15_12 FM(IP2SR4_15_12) IP2SR4_15_12 \
|
||||
FM(IP0SR4_19_16) IP0SR4_19_16 FM(IP1SR4_19_16) IP1SR4_19_16 FM(IP2SR4_19_16) IP2SR4_19_16 \
|
||||
FM(IP0SR4_23_20) IP0SR4_23_20 FM(IP1SR4_23_20) IP1SR4_23_20 FM(IP2SR4_23_20) IP2SR4_23_20 \
|
||||
FM(IP0SR4_27_24) IP0SR4_27_24 FM(IP1SR4_27_24) IP1SR4_27_24 FM(IP2SR4_27_24) IP2SR4_27_24 \
|
||||
FM(IP0SR4_31_28) IP0SR4_31_28 FM(IP1SR4_31_28) IP1SR4_31_28 FM(IP2SR4_31_28) IP2SR4_31_28 \
|
||||
FM(IP0SR4_23_20) IP0SR4_23_20 FM(IP1SR4_23_20) IP1SR4_23_20 \
|
||||
FM(IP0SR4_27_24) IP0SR4_27_24 FM(IP1SR4_27_24) IP1SR4_27_24 \
|
||||
FM(IP0SR4_31_28) IP0SR4_31_28 FM(IP1SR4_31_28) IP1SR4_31_28 \
|
||||
\
|
||||
FM(IP0SR5_3_0) IP0SR5_3_0 FM(IP1SR5_3_0) IP1SR5_3_0 FM(IP2SR5_3_0) IP2SR5_3_0 \
|
||||
FM(IP0SR5_3_0) IP0SR5_3_0 FM(IP1SR5_3_0) IP1SR5_3_0 \
|
||||
FM(IP0SR5_7_4) IP0SR5_7_4 FM(IP1SR5_7_4) IP1SR5_7_4 FM(IP2SR5_7_4) IP2SR5_7_4 \
|
||||
FM(IP0SR5_11_8) IP0SR5_11_8 FM(IP1SR5_11_8) IP1SR5_11_8 FM(IP2SR5_11_8) IP2SR5_11_8 \
|
||||
FM(IP0SR5_15_12) IP0SR5_15_12 FM(IP1SR5_15_12) IP1SR5_15_12 FM(IP2SR5_15_12) IP2SR5_15_12 \
|
||||
FM(IP0SR5_19_16) IP0SR5_19_16 FM(IP1SR5_19_16) IP1SR5_19_16 FM(IP2SR5_19_16) IP2SR5_19_16 \
|
||||
FM(IP0SR5_23_20) IP0SR5_23_20 FM(IP1SR5_23_20) IP1SR5_23_20 FM(IP2SR5_23_20) IP2SR5_23_20 \
|
||||
FM(IP0SR5_27_24) IP0SR5_27_24 FM(IP1SR5_27_24) IP1SR5_27_24 FM(IP2SR5_27_24) IP2SR5_27_24 \
|
||||
FM(IP0SR5_31_28) IP0SR5_31_28 FM(IP1SR5_31_28) IP1SR5_31_28 FM(IP2SR5_31_28) IP2SR5_31_28
|
||||
FM(IP0SR5_23_20) IP0SR5_23_20 FM(IP1SR5_23_20) IP1SR5_23_20 \
|
||||
FM(IP0SR5_27_24) IP0SR5_27_24 FM(IP1SR5_27_24) IP1SR5_27_24 \
|
||||
FM(IP0SR5_31_28) IP0SR5_31_28 FM(IP1SR5_31_28) IP1SR5_31_28
|
||||
|
||||
/* MOD_SEL2 */ /* 0 */ /* 1 */ /* 2 */ /* 3 */
|
||||
#define MOD_SEL2_15_14 FM(SEL_I2C6_0) F_(0, 0) F_(0, 0) FM(SEL_I2C6_3)
|
||||
@ -629,7 +615,36 @@ enum {
|
||||
};
|
||||
|
||||
static const u16 pinmux_data[] = {
|
||||
/* Using GP_2_[2-15] requires disabling I2C in MOD_SEL2 */
|
||||
#define GP_2_2_FN GP_2_2_FN, FN_SEL_I2C0_0
|
||||
#define GP_2_3_FN GP_2_3_FN, FN_SEL_I2C0_0
|
||||
#define GP_2_4_FN GP_2_4_FN, FN_SEL_I2C1_0
|
||||
#define GP_2_5_FN GP_2_5_FN, FN_SEL_I2C1_0
|
||||
#define GP_2_6_FN GP_2_6_FN, FN_SEL_I2C2_0
|
||||
#define GP_2_7_FN GP_2_7_FN, FN_SEL_I2C2_0
|
||||
#define GP_2_8_FN GP_2_8_FN, FN_SEL_I2C3_0
|
||||
#define GP_2_9_FN GP_2_9_FN, FN_SEL_I2C3_0
|
||||
#define GP_2_10_FN GP_2_10_FN, FN_SEL_I2C4_0
|
||||
#define GP_2_11_FN GP_2_11_FN, FN_SEL_I2C4_0
|
||||
#define GP_2_12_FN GP_2_12_FN, FN_SEL_I2C5_0
|
||||
#define GP_2_13_FN GP_2_13_FN, FN_SEL_I2C5_0
|
||||
#define GP_2_14_FN GP_2_14_FN, FN_SEL_I2C6_0
|
||||
#define GP_2_15_FN GP_2_15_FN, FN_SEL_I2C6_0
|
||||
PINMUX_DATA_GP_ALL(),
|
||||
#undef GP_2_2_FN
|
||||
#undef GP_2_3_FN
|
||||
#undef GP_2_4_FN
|
||||
#undef GP_2_5_FN
|
||||
#undef GP_2_6_FN
|
||||
#undef GP_2_7_FN
|
||||
#undef GP_2_8_FN
|
||||
#undef GP_2_9_FN
|
||||
#undef GP_2_10_FN
|
||||
#undef GP_2_11_FN
|
||||
#undef GP_2_12_FN
|
||||
#undef GP_2_13_FN
|
||||
#undef GP_2_14_FN
|
||||
#undef GP_2_15_FN
|
||||
|
||||
PINMUX_SINGLE(MMC_D7),
|
||||
PINMUX_SINGLE(MMC_D6),
|
||||
@ -3223,14 +3238,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_1_1_FN, GPSR1_1,
|
||||
GP_1_0_FN, GPSR1_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR2", 0xe6050840, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR2", 0xe6050840, 32,
|
||||
GROUP(-7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP2_31_25 RESERVED */
|
||||
GP_2_24_FN, GPSR2_24,
|
||||
GP_2_23_FN, GPSR2_23,
|
||||
GP_2_22_FN, GPSR2_22,
|
||||
@ -3257,22 +3269,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_2_1_FN, GPSR2_1,
|
||||
GP_2_0_FN, GPSR2_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR3", 0xe6058840, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR3", 0xe6058840, 32,
|
||||
GROUP(-15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP3_31_17 RESERVED */
|
||||
GP_3_16_FN, GPSR3_16,
|
||||
GP_3_15_FN, GPSR3_15,
|
||||
GP_3_14_FN, GPSR3_14,
|
||||
@ -3325,18 +3326,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_4_1_FN, GPSR4_1,
|
||||
GP_4_0_FN, GPSR4_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR5", 0xe6060840, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR5", 0xe6060840, 32,
|
||||
GROUP(-11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP5_31_21 RESERVED */
|
||||
GP_5_20_FN, GPSR5_20,
|
||||
GP_5_19_FN, GPSR5_19,
|
||||
GP_5_18_FN, GPSR5_18,
|
||||
@ -3359,18 +3353,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_5_1_FN, GPSR5_1,
|
||||
GP_5_0_FN, GPSR5_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR6", 0xe6068040, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR6", 0xe6068040, 32,
|
||||
GROUP(-11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP6_31_21 RESERVED */
|
||||
GP_6_20_FN, GPSR6_20,
|
||||
GP_6_19_FN, GPSR6_19,
|
||||
GP_6_18_FN, GPSR6_18,
|
||||
@ -3393,18 +3380,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_6_1_FN, GPSR6_1,
|
||||
GP_6_0_FN, GPSR6_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR7", 0xe6068840, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR7", 0xe6068840, 32,
|
||||
GROUP(-11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP7_31_21 RESERVED */
|
||||
GP_7_20_FN, GPSR7_20,
|
||||
GP_7_19_FN, GPSR7_19,
|
||||
GP_7_18_FN, GPSR7_18,
|
||||
@ -3427,18 +3407,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_7_1_FN, GPSR7_1,
|
||||
GP_7_0_FN, GPSR7_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR8", 0xe6069040, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR8", 0xe6069040, 32,
|
||||
GROUP(-11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP8_31_21 RESERVED */
|
||||
GP_8_20_FN, GPSR8_20,
|
||||
GP_8_19_FN, GPSR8_19,
|
||||
GP_8_18_FN, GPSR8_18,
|
||||
@ -3461,18 +3434,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_8_1_FN, GPSR8_1,
|
||||
GP_8_0_FN, GPSR8_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR9", 0xe6069840, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR9", 0xe6069840, 32,
|
||||
GROUP(-11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP9_31_21 RESERVED */
|
||||
GP_9_20_FN, GPSR9_20,
|
||||
GP_9_19_FN, GPSR9_19,
|
||||
GP_9_18_FN, GPSR9_18,
|
||||
@ -3530,8 +3496,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP2SR1_7_4
|
||||
IP2SR1_3_0))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IP3SR1", 0xe605006c, 32, 4, GROUP(
|
||||
IP3SR1_31_28
|
||||
{ PINMUX_CFG_REG_VAR("IP3SR1", 0xe605006c, 32,
|
||||
GROUP(-4, 4, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* IP3SR1_31_28 RESERVED */
|
||||
IP3SR1_27_24
|
||||
IP3SR1_23_20
|
||||
IP3SR1_19_16
|
||||
@ -3570,19 +3538,21 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP2SR2_7_4
|
||||
IP2SR2_3_0))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IP0SR3", 0xe6058860, 32, 4, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("IP0SR3", 0xe6058860, 32,
|
||||
GROUP(4, 4, 4, -8, 4, 4, -4),
|
||||
GROUP(
|
||||
IP0SR3_31_28
|
||||
IP0SR3_27_24
|
||||
IP0SR3_23_20
|
||||
IP0SR3_19_16
|
||||
IP0SR3_15_12
|
||||
/* IP0SR3_19_12 RESERVED */
|
||||
IP0SR3_11_8
|
||||
IP0SR3_7_4
|
||||
IP0SR3_3_0))
|
||||
/* IP0SR3_3_0 RESERVED */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IP1SR3", 0xe6058864, 32, 4, GROUP(
|
||||
IP1SR3_31_28
|
||||
IP1SR3_27_24
|
||||
{ PINMUX_CFG_REG_VAR("IP1SR3", 0xe6058864, 32,
|
||||
GROUP(-8, 4, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* IP1SR3_31_24 RESERVED */
|
||||
IP1SR3_23_20
|
||||
IP1SR3_19_16
|
||||
IP1SR3_15_12
|
||||
@ -3610,15 +3580,15 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP1SR4_7_4
|
||||
IP1SR4_3_0))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IP2SR4", 0xe6060068, 32, 4, GROUP(
|
||||
IP2SR4_31_28
|
||||
IP2SR4_27_24
|
||||
IP2SR4_23_20
|
||||
{ PINMUX_CFG_REG_VAR("IP2SR4", 0xe6060068, 32,
|
||||
GROUP(-12, 4, 4, 4, 4, -4),
|
||||
GROUP(
|
||||
/* IP2SR4_31_20 RESERVED */
|
||||
IP2SR4_19_16
|
||||
IP2SR4_15_12
|
||||
IP2SR4_11_8
|
||||
IP2SR4_7_4
|
||||
IP2SR4_3_0))
|
||||
/* IP2SR4_3_0 RESERVED */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IP0SR5", 0xe6060860, 32, 4, GROUP(
|
||||
IP0SR5_31_28
|
||||
@ -3640,15 +3610,15 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP1SR5_7_4
|
||||
IP1SR5_3_0))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IP2SR5", 0xe6060868, 32, 4, GROUP(
|
||||
IP2SR5_31_28
|
||||
IP2SR5_27_24
|
||||
IP2SR5_23_20
|
||||
{ PINMUX_CFG_REG_VAR("IP2SR5", 0xe6060868, 32,
|
||||
GROUP(-12, 4, 4, 4, 4, -4),
|
||||
GROUP(
|
||||
/* IP2SR5_31_20 RESERVED */
|
||||
IP2SR5_19_16
|
||||
IP2SR5_15_12
|
||||
IP2SR5_11_8
|
||||
IP2SR5_7_4
|
||||
IP2SR5_3_0))
|
||||
/* IP2SR5_3_0 RESERVED */ ))
|
||||
},
|
||||
#undef F_
|
||||
#undef FM
|
||||
@ -3656,16 +3626,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) x,
|
||||
#define FM(x) FN_##x,
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL2", 0xe6050900, 32,
|
||||
GROUP(4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1),
|
||||
GROUP(-16, 2, 2, 2, 2, 2, 2, 2, -2),
|
||||
GROUP(
|
||||
/* RESERVED 31, 30, 29, 28 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 27, 26, 25, 24 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 23, 22, 21, 20 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 19, 18, 17, 16 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 31-16 */
|
||||
MOD_SEL2_15_14
|
||||
MOD_SEL2_13_12
|
||||
MOD_SEL2_11_10
|
||||
@ -3673,8 +3636,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MOD_SEL2_7_6
|
||||
MOD_SEL2_5_4
|
||||
MOD_SEL2_3_2
|
||||
0, 0,
|
||||
0, 0, ))
|
||||
/* RESERVED 1-0 */ ))
|
||||
},
|
||||
{ },
|
||||
};
|
||||
|
@ -144,9 +144,6 @@
|
||||
#define IP2SR0_11_8 FM(IRQ1) F_(0, 0) F_(0, 0) FM(MSIOF1_SS2) F_(0, 0) FM(TSN0_PHY_INT_A) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR0_15_12 FM(IRQ2) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) FM(TSN1_PHY_INT_A) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR0_19_16 FM(IRQ3) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) FM(TSN2_PHY_INT_A) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR0_23_20 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR0_27_24 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
#define IP2SR0_31_28 F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
|
||||
/* IP0SR1 */ /* 0 */ /* 1 */ /* 2 */ /* 3 */ /* 4 */ /* 5 */ /* 6 */ /* 7 - F */
|
||||
#define IP0SR1_3_0 FM(GP1_00) FM(TCLK1) FM(HSCK2) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
|
||||
@ -192,9 +189,9 @@ FM(IP0SR0_7_4) IP0SR0_7_4 FM(IP1SR0_7_4) IP1SR0_7_4 FM(IP2SR0_7_4) IP2SR0_7_4
|
||||
FM(IP0SR0_11_8) IP0SR0_11_8 FM(IP1SR0_11_8) IP1SR0_11_8 FM(IP2SR0_11_8) IP2SR0_11_8 \
|
||||
FM(IP0SR0_15_12) IP0SR0_15_12 FM(IP1SR0_15_12) IP1SR0_15_12 FM(IP2SR0_15_12) IP2SR0_15_12 \
|
||||
FM(IP0SR0_19_16) IP0SR0_19_16 FM(IP1SR0_19_16) IP1SR0_19_16 FM(IP2SR0_19_16) IP2SR0_19_16 \
|
||||
FM(IP0SR0_23_20) IP0SR0_23_20 FM(IP1SR0_23_20) IP1SR0_23_20 FM(IP2SR0_23_20) IP2SR0_23_20 \
|
||||
FM(IP0SR0_27_24) IP0SR0_27_24 FM(IP1SR0_27_24) IP1SR0_27_24 FM(IP2SR0_27_24) IP2SR0_27_24 \
|
||||
FM(IP0SR0_31_28) IP0SR0_31_28 FM(IP1SR0_31_28) IP1SR0_31_28 FM(IP2SR0_31_28) IP2SR0_31_28 \
|
||||
FM(IP0SR0_23_20) IP0SR0_23_20 FM(IP1SR0_23_20) IP1SR0_23_20 \
|
||||
FM(IP0SR0_27_24) IP0SR0_27_24 FM(IP1SR0_27_24) IP1SR0_27_24 \
|
||||
FM(IP0SR0_31_28) IP0SR0_31_28 FM(IP1SR0_31_28) IP1SR0_31_28 \
|
||||
\
|
||||
FM(IP0SR1_3_0) IP0SR1_3_0 \
|
||||
FM(IP0SR1_7_4) IP0SR1_7_4 \
|
||||
@ -257,7 +254,28 @@ enum {
|
||||
};
|
||||
|
||||
static const u16 pinmux_data[] = {
|
||||
/* Using GP_1_[0-9] requires disabling I2C in MOD_SEL1 */
|
||||
#define GP_1_0_FN GP_1_0_FN, FN_SEL_I2C0_0
|
||||
#define GP_1_1_FN GP_1_1_FN, FN_SEL_I2C0_0
|
||||
#define GP_1_2_FN GP_1_2_FN, FN_SEL_I2C1_0
|
||||
#define GP_1_3_FN GP_1_3_FN, FN_SEL_I2C1_0
|
||||
#define GP_1_4_FN GP_1_4_FN, FN_SEL_I2C2_0
|
||||
#define GP_1_5_FN GP_1_5_FN, FN_SEL_I2C2_0
|
||||
#define GP_1_6_FN GP_1_6_FN, FN_SEL_I2C3_0
|
||||
#define GP_1_7_FN GP_1_7_FN, FN_SEL_I2C3_0
|
||||
#define GP_1_8_FN GP_1_8_FN, FN_SEL_I2C4_0
|
||||
#define GP_1_9_FN GP_1_9_FN, FN_SEL_I2C4_0
|
||||
PINMUX_DATA_GP_ALL(),
|
||||
#undef GP_1_0_FN
|
||||
#undef GP_1_1_FN
|
||||
#undef GP_1_2_FN
|
||||
#undef GP_1_3_FN
|
||||
#undef GP_1_4_FN
|
||||
#undef GP_1_5_FN
|
||||
#undef GP_1_6_FN
|
||||
#undef GP_1_7_FN
|
||||
#undef GP_1_8_FN
|
||||
#undef GP_1_9_FN
|
||||
|
||||
PINMUX_SINGLE(SD_WP),
|
||||
PINMUX_SINGLE(SD_CD),
|
||||
@ -1599,18 +1617,11 @@ static const struct sh_pfc_function pinmux_functions[] = {
|
||||
static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) FN_##y
|
||||
#define FM(x) FN_##x
|
||||
{ PINMUX_CFG_REG("GPSR0", 0xe6050040, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR0", 0xe6050040, 32,
|
||||
GROUP(-11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP0_31_21 RESERVED */
|
||||
GP_0_20_FN, GPSR0_20,
|
||||
GP_0_19_FN, GPSR0_19,
|
||||
GP_0_18_FN, GPSR0_18,
|
||||
@ -1633,14 +1644,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_0_1_FN, GPSR0_1,
|
||||
GP_0_0_FN, GPSR0_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR1", 0xe6050840, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR1", 0xe6050840, 32,
|
||||
GROUP(-7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP1_31_25 RESERVED */
|
||||
GP_1_24_FN, GPSR1_24,
|
||||
GP_1_23_FN, GPSR1_23,
|
||||
GP_1_22_FN, GPSR1_22,
|
||||
@ -1667,22 +1675,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_1_1_FN, GPSR1_1,
|
||||
GP_1_0_FN, GPSR1_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR2", 0xe6051040, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR2", 0xe6051040, 32,
|
||||
GROUP(-15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP2_31_17 RESERVED */
|
||||
GP_2_16_FN, GPSR2_16,
|
||||
GP_2_15_FN, GPSR2_15,
|
||||
GP_2_14_FN, GPSR2_14,
|
||||
@ -1701,20 +1698,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_2_1_FN, GPSR2_1,
|
||||
GP_2_0_FN, GPSR2_0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR3", 0xe6051840, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("GPSR3", 0xe6051840, 32,
|
||||
GROUP(-13, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP3_31_19 RESERVED */
|
||||
GP_3_18_FN, GPSR3_18,
|
||||
GP_3_17_FN, GPSR3_17,
|
||||
GP_3_16_FN, GPSR3_16,
|
||||
@ -1760,10 +1748,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
IP1SR0_7_4
|
||||
IP1SR0_3_0))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IP2SR0", 0xe6050068, 32, 4, GROUP(
|
||||
IP2SR0_31_28
|
||||
IP2SR0_27_24
|
||||
IP2SR0_23_20
|
||||
{ PINMUX_CFG_REG_VAR("IP2SR0", 0xe6050068, 32,
|
||||
GROUP(-12, 4, 4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* IP2SR0_31_20 RESERVED */
|
||||
IP2SR0_19_16
|
||||
IP2SR0_15_12
|
||||
IP2SR0_11_8
|
||||
@ -1786,18 +1774,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
#define F_(x, y) x,
|
||||
#define FM(x) FN_##x,
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL1", 0xe6050900, 32,
|
||||
GROUP(4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(-20, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED 31, 30, 29, 28 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 27, 26, 25, 24 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 23, 22, 21, 20 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 19, 18, 17, 16 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 15, 14, 13, 12 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* RESERVED 31-12 */
|
||||
MOD_SEL1_11_10
|
||||
MOD_SEL1_9_8
|
||||
MOD_SEL1_7_6
|
||||
@ -1923,7 +1902,6 @@ static const struct pinmux_drive_reg pinmux_drive_regs[] = {
|
||||
enum ioctrl_regs {
|
||||
POC0,
|
||||
POC1,
|
||||
POC2,
|
||||
POC3,
|
||||
TD0SEL1,
|
||||
};
|
||||
@ -1931,7 +1909,6 @@ enum ioctrl_regs {
|
||||
static const struct pinmux_ioctrl_reg pinmux_ioctrl_regs[] = {
|
||||
[POC0] = { 0xe60500a0, },
|
||||
[POC1] = { 0xe60508a0, },
|
||||
[POC2] = { 0xe60510a0, },
|
||||
[POC3] = { 0xe60518a0, },
|
||||
[TD0SEL1] = { 0xe6050920, },
|
||||
{ /* sentinel */ },
|
||||
|
@ -1072,31 +1072,20 @@ static const struct pinmux_func pinmux_func_gpios[] = {
|
||||
};
|
||||
|
||||
static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
{ PINMUX_CFG_REG("PBIORL", 0xfffe3886, 16, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PBIORL", 0xfffe3886, 16,
|
||||
GROUP(-4, 1, 1, 1, 1, -8),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PB11_IN, PB11_OUT,
|
||||
PB10_IN, PB10_OUT,
|
||||
PB9_IN, PB9_OUT,
|
||||
PB8_IN, PB8_OUT,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0 ))
|
||||
/* RESERVED [8] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PBCRL4", 0xfffe3890, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
{ PINMUX_CFG_REG_VAR("PBCRL4", 0xfffe3890, 16,
|
||||
GROUP(-12, 4),
|
||||
GROUP(
|
||||
/* RESERVED [12] */
|
||||
PB12MD_00, PB12MD_01, PB12MD_10, PB12MD_11,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
@ -1139,13 +1128,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PB0MD_00, PB0MD_01, PB0MD_10, PB0MD_11,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("IFCR", 0xfffe38a2, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
{ PINMUX_CFG_REG_VAR("IFCR", 0xfffe38a2, 16,
|
||||
GROUP(-12, 4),
|
||||
GROUP(
|
||||
/* RESERVED [12] */
|
||||
PB12IRQ_00, PB12IRQ_01, PB12IRQ_10, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
@ -1167,9 +1153,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PC1_IN, PC1_OUT,
|
||||
PC0_IN, PC0_OUT ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PCCRL4", 0xfffe3910, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
{ PINMUX_CFG_REG_VAR("PCCRL4", 0xfffe3910, 16,
|
||||
GROUP(-4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PC14MD_0, PC14MD_1,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
@ -1417,8 +1404,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PF1_IN, PF1_OUT,
|
||||
PF0_IN, PF0_OUT ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PFCRH4", 0xfffe3a88, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PFCRH4", 0xfffe3a88, 16,
|
||||
GROUP(-4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
|
||||
PF30MD_0, PF30MD_1,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
@ -1464,19 +1464,20 @@ static const struct pinmux_func pinmux_func_gpios[] = {
|
||||
};
|
||||
|
||||
static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
{ PINMUX_CFG_REG("PAIOR0", 0xfffe3812, 16, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PAIOR0", 0xfffe3812, 16,
|
||||
GROUP(-12, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [12] */
|
||||
PA3_IN, PA3_OUT,
|
||||
PA2_IN, PA2_OUT,
|
||||
PA1_IN, PA1_OUT,
|
||||
PA0_IN, PA0_OUT ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PBCR5", 0xfffe3824, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PBCR5", 0xfffe3824, 16,
|
||||
GROUP(-4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PB22MD_00, PB22MD_01, PB22MD_10, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
PB21MD_0, PB21MD_1, 0, 0, 0, 0, 0, 0,
|
||||
@ -1525,21 +1526,22 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, PB4MD_01, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PBCR0", 0xfffe382e, 16, 4, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PBCR0", 0xfffe382e, 16,
|
||||
GROUP(4, 4, 4, -4),
|
||||
GROUP(
|
||||
0, PB3MD_1, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, PB2MD_1, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, PB1MD_1, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
/* RESERVED [4] */ ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PBIOR1", 0xfffe3830, 16, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PBIOR1", 0xfffe3830, 16,
|
||||
GROUP(-9, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [9] */
|
||||
PB22_IN, PB22_OUT,
|
||||
PB21_IN, PB21_OUT,
|
||||
PB20_IN, PB20_OUT,
|
||||
@ -1568,9 +1570,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0 ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PCCR2", 0xfffe384a, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PCCR2", 0xfffe384a, 16,
|
||||
GROUP(-4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PC10MD_0, PC10MD_1, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
PC9MD_0, PC9MD_1, 0, 0, 0, 0, 0, 0,
|
||||
@ -1599,8 +1602,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PCIOR0", 0xfffe3852, 16, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PCIOR0", 0xfffe3852, 16,
|
||||
GROUP(-5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [5] */
|
||||
PC10_IN, PC10_OUT,
|
||||
PC9_IN, PC9_OUT,
|
||||
PC8_IN, PC8_OUT,
|
||||
@ -1675,11 +1680,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PD0_IN, PD0_OUT ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PECR1", 0xfffe388c, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PECR1", 0xfffe388c, 16,
|
||||
GROUP(-8, 4, 4),
|
||||
GROUP(
|
||||
/* RESERVED [8] */
|
||||
PE5MD_00, PE5MD_01, 0, PE5MD_11, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
PE4MD_00, PE4MD_01, 0, PE4MD_11, 0, 0, 0, 0,
|
||||
@ -1698,10 +1702,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PEIOR0", 0xfffe3892, 16, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PEIOR0", 0xfffe3892, 16,
|
||||
GROUP(-10, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [10] */
|
||||
PE5_IN, PE5_OUT,
|
||||
PE4_IN, PE4_OUT,
|
||||
PE3_IN, PE3_OUT,
|
||||
@ -1710,10 +1714,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PE0_IN, PE0_OUT ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PFCR3", 0xfffe38a8, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PFCR3", 0xfffe38a8, 16,
|
||||
GROUP(-12, 4),
|
||||
GROUP(
|
||||
/* RESERVED [12] */
|
||||
PF12MD_000, PF12MD_001, 0, PF12MD_011,
|
||||
PF12MD_100, PF12MD_101, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
@ -1780,25 +1784,19 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PF0_IN, PF0_OUT ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PGCR7", 0xfffe38c0, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PGCR7", 0xfffe38c0, 16,
|
||||
GROUP(-12, 4),
|
||||
GROUP(
|
||||
/* RESERVED [12] */
|
||||
PG0MD_000, PG0MD_001, PG0MD_010, PG0MD_011,
|
||||
PG0MD_100, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PGCR6", 0xfffe38c2, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PGCR6", 0xfffe38c2, 16,
|
||||
GROUP(-12, 4),
|
||||
GROUP(
|
||||
/* RESERVED [12] */
|
||||
PG24MD_00, PG24MD_01, PG24MD_10, PG24MD_11, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
@ -1869,19 +1867,21 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PG4MD_00, PG4MD_01, PG4MD_10, PG4MD_11, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PGCR0", 0xfffe38ce, 16, 4, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PGCR0", 0xfffe38ce, 16,
|
||||
GROUP(4, 4, 4, -4),
|
||||
GROUP(
|
||||
PG3MD_00, PG3MD_01, PG3MD_10, PG3MD_11, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
PG2MD_00, PG2MD_01, PG2MD_10, PG2MD_11, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
PG1MD_00, PG1MD_01, PG1MD_10, PG1MD_11, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
/* RESERVED [4] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PGIOR1", 0xfffe38d0, 16, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PGIOR1", 0xfffe38d0, 16,
|
||||
GROUP(-7, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [7] */
|
||||
PG24_IN, PG24_OUT,
|
||||
PG23_IN, PG23_OUT,
|
||||
PG22_IN, PG22_OUT,
|
||||
|
@ -1966,15 +1966,18 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
* mode registers and modes are described in assending order [0..15]
|
||||
*/
|
||||
|
||||
{ PINMUX_CFG_REG("PAIOR0", 0xfffe3812, 16, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, PA1_IN, PA1_OUT,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, PA0_IN, PA0_OUT ))
|
||||
{ PINMUX_CFG_REG_VAR("PAIOR0", 0xfffe3812, 16,
|
||||
GROUP(-7, 1, -7, 1),
|
||||
GROUP(
|
||||
/* RESERVED [7] */
|
||||
PA1_IN, PA1_OUT,
|
||||
/* RESERVED [7] */
|
||||
PA0_IN, PA0_OUT ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PBCR5", 0xfffe3824, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
{ PINMUX_CFG_REG_VAR("PBCR5", 0xfffe3824, 16,
|
||||
GROUP(-4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PB22MD_000, PB22MD_001, PB22MD_010, PB22MD_011,
|
||||
PB22MD_100, PB22MD_101, PB22MD_110, PB22MD_111,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -2045,7 +2048,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PB4MD_00, PB4MD_01, PB4MD_10, PB4MD_11, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PBCR0", 0xfffe382e, 16, 4, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PBCR0", 0xfffe382e, 16,
|
||||
GROUP(4, 4, 4, -4),
|
||||
GROUP(
|
||||
PB3MD_00, PB3MD_01, PB3MD_10, PB3MD_11, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
@ -2055,13 +2060,13 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PB1MD_00, PB1MD_01, PB1MD_10, PB1MD_11, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
/* RESERVED [4] */ ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PBIOR1", 0xfffe3830, 16, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PBIOR1", 0xfffe3830, 16,
|
||||
GROUP(-9, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [9] */
|
||||
PB22_IN, PB22_OUT,
|
||||
PB21_IN, PB21_OUT,
|
||||
PB20_IN, PB20_OUT,
|
||||
@ -2089,13 +2094,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0 ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PCCR2", 0xfffe384a, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
{ PINMUX_CFG_REG_VAR("PCCR2", 0xfffe384a, 16,
|
||||
GROUP(-12, 4),
|
||||
GROUP(
|
||||
/* RESERVED [12] */
|
||||
PC8MD_000, PC8MD_001, PC8MD_010, PC8MD_011,
|
||||
PC8MD_100, PC8MD_101, PC8MD_110, PC8MD_111,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
@ -2130,8 +2132,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PCIOR0", 0xfffe3852, 16, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PCIOR0", 0xfffe3852, 16,
|
||||
GROUP(-7, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [7] */
|
||||
PC8_IN, PC8_OUT,
|
||||
PC7_IN, PC7_OUT,
|
||||
PC6_IN, PC6_OUT,
|
||||
@ -2244,9 +2248,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PE0MD_00, PE0MD_01, PE0MD_10, PE0MD_11, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PEIOR0", 0xfffe3892, 16, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PEIOR0", 0xfffe3892, 16,
|
||||
GROUP(-8, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [8] */
|
||||
PE7_IN, PE7_OUT,
|
||||
PE6_IN, PE6_OUT,
|
||||
PE5_IN, PE5_OUT,
|
||||
@ -2291,20 +2296,18 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PF16MD_100, PF16MD_101, PF16MD_110, PF16MD_111,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PFCR4", 0xfffe38a6, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
{ PINMUX_CFG_REG_VAR("PFCR4", 0xfffe38a6, 16,
|
||||
GROUP(-12, 4),
|
||||
GROUP(
|
||||
/* RESERVED [12] */
|
||||
PF15MD_000, PF15MD_001, PF15MD_010, PF15MD_011,
|
||||
PF15MD_100, PF15MD_101, PF15MD_110, PF15MD_111,
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PFCR3", 0xfffe38a8, 16, 4, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
{ PINMUX_CFG_REG_VAR("PFCR3", 0xfffe38a8, 16,
|
||||
GROUP(-4, 4, 4, 4),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PF14MD_000, PF14MD_001, PF14MD_010, PF14MD_011,
|
||||
PF14MD_100, PF14MD_101, PF14MD_110, PF14MD_111,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -2369,9 +2372,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0 ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PFIOR1", 0xfffe38b0, 16, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PFIOR1", 0xfffe38b0, 16,
|
||||
GROUP(-8, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [8] */
|
||||
PF23_IN, PF23_OUT,
|
||||
PF22_IN, PF22_OUT,
|
||||
PF21_IN, PF21_OUT,
|
||||
|
@ -3798,24 +3798,16 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PORTCR(308, 0xe6052134), /* PORT308CR */
|
||||
PORTCR(309, 0xe6052135), /* PORT309CR */
|
||||
|
||||
{ PINMUX_CFG_REG("MSEL2CR", 0xe605801c, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("MSEL2CR", 0xe605801c, 32,
|
||||
GROUP(-12, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [12] */
|
||||
MSEL2CR_MSEL19_0, MSEL2CR_MSEL19_1,
|
||||
MSEL2CR_MSEL18_0, MSEL2CR_MSEL18_1,
|
||||
MSEL2CR_MSEL17_0, MSEL2CR_MSEL17_1,
|
||||
MSEL2CR_MSEL16_0, MSEL2CR_MSEL16_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL2CR_MSEL14_0, MSEL2CR_MSEL14_1,
|
||||
MSEL2CR_MSEL13_0, MSEL2CR_MSEL13_1,
|
||||
MSEL2CR_MSEL12_0, MSEL2CR_MSEL12_1,
|
||||
@ -3833,60 +3825,43 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MSEL2CR_MSEL0_0, MSEL2CR_MSEL0_1,
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG("MSEL3CR", 0xe6058020, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("MSEL3CR", 0xe6058020, 32,
|
||||
GROUP(-3, 1, -12, 1, -3, 1, -1, 1, -2, 1, -3, 1,
|
||||
-2),
|
||||
GROUP(
|
||||
/* RESERVED [3] */
|
||||
MSEL3CR_MSEL28_0, MSEL3CR_MSEL28_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [12] */
|
||||
MSEL3CR_MSEL15_0, MSEL3CR_MSEL15_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [3] */
|
||||
MSEL3CR_MSEL11_0, MSEL3CR_MSEL11_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL3CR_MSEL9_0, MSEL3CR_MSEL9_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [2] */
|
||||
MSEL3CR_MSEL6_0, MSEL3CR_MSEL6_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [3] */
|
||||
MSEL3CR_MSEL2_0, MSEL3CR_MSEL2_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [2] */
|
||||
))
|
||||
},
|
||||
{ PINMUX_CFG_REG("MSEL4CR", 0xe6058024, 32, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("MSEL4CR", 0xe6058024, 32,
|
||||
GROUP(-2, 1, -1, 1, 1, -3, 1, 1, 1, 1, -3, 1,
|
||||
-1, 1, 1, 1, 1, 1, 1, 1, -2, 1, -2, 1,
|
||||
-1),
|
||||
GROUP(
|
||||
/* RESERVED [2] */
|
||||
MSEL4CR_MSEL29_0, MSEL4CR_MSEL29_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL4CR_MSEL27_0, MSEL4CR_MSEL27_1,
|
||||
MSEL4CR_MSEL26_0, MSEL4CR_MSEL26_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [3] */
|
||||
MSEL4CR_MSEL22_0, MSEL4CR_MSEL22_1,
|
||||
MSEL4CR_MSEL21_0, MSEL4CR_MSEL21_1,
|
||||
MSEL4CR_MSEL20_0, MSEL4CR_MSEL20_1,
|
||||
MSEL4CR_MSEL19_0, MSEL4CR_MSEL19_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [3] */
|
||||
MSEL4CR_MSEL15_0, MSEL4CR_MSEL15_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
MSEL4CR_MSEL13_0, MSEL4CR_MSEL13_1,
|
||||
MSEL4CR_MSEL12_0, MSEL4CR_MSEL12_1,
|
||||
MSEL4CR_MSEL11_0, MSEL4CR_MSEL11_1,
|
||||
@ -3894,13 +3869,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
MSEL4CR_MSEL9_0, MSEL4CR_MSEL9_1,
|
||||
MSEL4CR_MSEL8_0, MSEL4CR_MSEL8_1,
|
||||
MSEL4CR_MSEL7_0, MSEL4CR_MSEL7_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [2] */
|
||||
MSEL4CR_MSEL4_0, MSEL4CR_MSEL4_1,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [2] */
|
||||
MSEL4CR_MSEL1_0, MSEL4CR_MSEL1_1,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
))
|
||||
},
|
||||
{ },
|
||||
|
@ -1014,25 +1014,24 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PTJ1_FN, PTJ1_OUT, 0, PTJ1_IN,
|
||||
PTJ0_FN, PTJ0_OUT, 0, PTJ0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PKCR", 0xa4050112, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PKCR", 0xa4050112, 16,
|
||||
GROUP(-8, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [8] */
|
||||
PTK3_FN, PTK3_OUT, 0, PTK3_IN,
|
||||
PTK2_FN, PTK2_OUT, 0, PTK2_IN,
|
||||
PTK1_FN, PTK1_OUT, 0, PTK1_IN,
|
||||
PTK0_FN, PTK0_OUT, 0, PTK0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PLCR", 0xa4050114, 16, 2, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PLCR", 0xa4050114, 16,
|
||||
GROUP(2, 2, 2, 2, 2, -6),
|
||||
GROUP(
|
||||
PTL7_FN, PTL7_OUT, 0, PTL7_IN,
|
||||
PTL6_FN, PTL6_OUT, 0, PTL6_IN,
|
||||
PTL5_FN, PTL5_OUT, 0, PTL5_IN,
|
||||
PTL4_FN, PTL4_OUT, 0, PTL4_IN,
|
||||
PTL3_FN, PTL3_OUT, 0, PTL3_IN,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0 ))
|
||||
/* RESERVED [6] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PMCR", 0xa4050116, 16, 2, GROUP(
|
||||
PTM7_FN, PTM7_OUT, 0, PTM7_IN,
|
||||
@ -1044,10 +1043,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PTM1_FN, PTM1_OUT, 0, PTM1_IN,
|
||||
PTM0_FN, PTM0_OUT, 0, PTM0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PPCR", 0xa4050118, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PPCR", 0xa4050118, 16,
|
||||
GROUP(-6, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [6] */
|
||||
PTP4_FN, PTP4_OUT, 0, PTP4_IN,
|
||||
PTP3_FN, PTP3_OUT, 0, PTP3_IN,
|
||||
PTP2_FN, PTP2_OUT, 0, PTP2_IN,
|
||||
@ -1064,40 +1063,40 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PTR1_FN, PTR1_OUT, 0, PTR1_IN,
|
||||
PTR0_FN, PTR0_OUT, 0, PTR0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSCR", 0xa405011c, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PSCR", 0xa405011c, 16,
|
||||
GROUP(-6, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [6] */
|
||||
PTS4_FN, PTS4_OUT, 0, PTS4_IN,
|
||||
PTS3_FN, PTS3_OUT, 0, PTS3_IN,
|
||||
PTS2_FN, PTS2_OUT, 0, PTS2_IN,
|
||||
PTS1_FN, PTS1_OUT, 0, PTS1_IN,
|
||||
PTS0_FN, PTS0_OUT, 0, PTS0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PTCR", 0xa405011e, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PTCR", 0xa405011e, 16,
|
||||
GROUP(-6, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [6] */
|
||||
PTT4_FN, PTT4_OUT, 0, PTT4_IN,
|
||||
PTT3_FN, PTT3_OUT, 0, PTT3_IN,
|
||||
PTT2_FN, PTT2_OUT, 0, PTT2_IN,
|
||||
PTT1_FN, PTT1_OUT, 0, PTT1_IN,
|
||||
PTT0_FN, PTT0_OUT, 0, PTT0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PUCR", 0xa4050120, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PUCR", 0xa4050120, 16,
|
||||
GROUP(-6, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [6] */
|
||||
PTU4_FN, PTU4_OUT, 0, PTU4_IN,
|
||||
PTU3_FN, PTU3_OUT, 0, PTU3_IN,
|
||||
PTU2_FN, PTU2_OUT, 0, PTU2_IN,
|
||||
PTU1_FN, PTU1_OUT, 0, PTU1_IN,
|
||||
PTU0_FN, PTU0_OUT, 0, PTU0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PVCR", 0xa4050122, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PVCR", 0xa4050122, 16,
|
||||
GROUP(-6, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [6] */
|
||||
PTV4_FN, PTV4_OUT, 0, PTV4_IN,
|
||||
PTV3_FN, PTV3_OUT, 0, PTV3_IN,
|
||||
PTV2_FN, PTV2_OUT, 0, PTV2_IN,
|
||||
|
@ -1,5 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <cpu/sh7722.h>
|
||||
|
||||
@ -1256,14 +1255,16 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
HPD49, PTB1_OUT, 0, PTB1_IN,
|
||||
HPD48, PTB0_OUT, 0, PTB0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PCCR", 0xa4050104, 16, 2, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PCCR", 0xa4050104, 16,
|
||||
GROUP(2, -2, 2, 2, 2, 2, -2, 2),
|
||||
GROUP(
|
||||
0, 0, 0, PTC7_IN,
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
IOIS16, 0, 0, PTC5_IN,
|
||||
HPDQM7, PTC4_OUT, 0, PTC4_IN,
|
||||
HPDQM6, PTC3_OUT, 0, PTC3_IN,
|
||||
HPDQM5, PTC2_OUT, 0, PTC2_IN,
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
HPDQM4, PTC0_OUT, 0, PTC0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PDCR", 0xa4050106, 16, 2, GROUP(
|
||||
@ -1276,13 +1277,14 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
SDHICMD, PTD1_OUT, 0, PTD1_IN,
|
||||
SDHICLK, PTD0_OUT, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PECR", 0xa4050108, 16, 2, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PECR", 0xa4050108, 16,
|
||||
GROUP(2, 2, 2, 2, -4, 2, 2),
|
||||
GROUP(
|
||||
A25, PTE7_OUT, 0, PTE7_IN,
|
||||
A24, PTE6_OUT, 0, PTE6_IN,
|
||||
A23, PTE5_OUT, 0, PTE5_IN,
|
||||
A22, PTE4_OUT, 0, PTE4_IN,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [4] */
|
||||
IRQ5, PTE1_OUT, 0, PTE1_IN,
|
||||
IRQ4_BS, PTE0_OUT, 0, PTE0_IN ))
|
||||
},
|
||||
@ -1296,10 +1298,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
SIORXD_SIUBISLD, 0, 0, PTF1_IN,
|
||||
SIOTXD_SIUBOSLD, PTF0_OUT, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PGCR", 0xa405010c, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PGCR", 0xa405010c, 16,
|
||||
GROUP(-6, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [6] */
|
||||
AUDSYNC, PTG4_OUT, 0, 0,
|
||||
AUDATA3, PTG3_OUT, 0, 0,
|
||||
AUDATA2, PTG2_OUT, 0, 0,
|
||||
@ -1316,13 +1318,13 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
LCDD17_DV_HSYNC, PTH1_OUT, 0, PTH1_IN,
|
||||
LCDD16_DV_VSYNC, PTH0_OUT, 0, PTH0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PJCR", 0xa4050110, 16, 2, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PJCR", 0xa4050110, 16,
|
||||
GROUP(2, 2, 2, -6, 2, 2),
|
||||
GROUP(
|
||||
STATUS0, PTJ7_OUT, 0, 0,
|
||||
0, PTJ6_OUT, 0, 0,
|
||||
PDSTATUS, PTJ5_OUT, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [6] */
|
||||
IRQ1, PTJ1_OUT, 0, PTJ1_IN,
|
||||
IRQ0, PTJ0_OUT, 0, PTJ0_IN ))
|
||||
},
|
||||
@ -1376,50 +1378,50 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PTQ1, PTQ1_OUT, 0, 0,
|
||||
PTQ0, PTQ0_OUT, 0, PTQ0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PRCR", 0xa405011c, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PRCR", 0xa405011c, 16,
|
||||
GROUP(-6, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [6] */
|
||||
LCDRD, PTR4_OUT, 0, 0,
|
||||
CS6B_CE1B_LCDCS2, PTR3_OUT, 0, 0,
|
||||
WAIT, 0, 0, PTR2_IN,
|
||||
LCDDCK_LCDWR, PTR1_OUT, 0, 0,
|
||||
LCDVEPWC_LCDVEPWC2, PTR0_OUT, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSCR", 0xa405011e, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PSCR", 0xa405011e, 16,
|
||||
GROUP(-6, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [6] */
|
||||
SCIF0_CTS_SIUAISPD, 0, 0, PTS4_IN,
|
||||
SCIF0_RTS_SIUAOSPD, PTS3_OUT, 0, 0,
|
||||
SCIF0_SCK_TPUTO, PTS2_OUT, 0, PTS2_IN,
|
||||
SCIF0_RXD, 0, 0, PTS1_IN,
|
||||
SCIF0_TXD, PTS0_OUT, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PTCR", 0xa4050140, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PTCR", 0xa4050140, 16,
|
||||
GROUP(-6, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [6] */
|
||||
FOE_VIO_VD2, PTT4_OUT, 0, PTT4_IN,
|
||||
FWE, PTT3_OUT, 0, PTT3_IN,
|
||||
FSC, PTT2_OUT, 0, PTT2_IN,
|
||||
DREQ0, 0, 0, PTT1_IN,
|
||||
FCDE, PTT0_OUT, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PUCR", 0xa4050142, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PUCR", 0xa4050142, 16,
|
||||
GROUP(-6, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [6] */
|
||||
NAF2_VIO_D10, PTU4_OUT, 0, PTU4_IN,
|
||||
NAF1_VIO_D9, PTU3_OUT, 0, PTU3_IN,
|
||||
NAF0_VIO_D8, PTU2_OUT, 0, PTU2_IN,
|
||||
FRB_VIO_CLK2, 0, 0, PTU1_IN,
|
||||
FCE_VIO_HD2, PTU0_OUT, 0, PTU0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PVCR", 0xa4050144, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PVCR", 0xa4050144, 16,
|
||||
GROUP(-6, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [6] */
|
||||
NAF7_VIO_D15, PTV4_OUT, 0, PTV4_IN,
|
||||
NAF6_VIO_D14, PTV3_OUT, 0, PTV3_IN,
|
||||
NAF5_VIO_D13, PTV2_OUT, 0, PTV2_IN,
|
||||
@ -1446,9 +1448,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
LCDD19_DV_CLKI, PTX1_OUT, 0, PTX1_IN,
|
||||
LCDD18_DV_CLK, PTX0_OUT, 0, PTX0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PYCR", 0xa405014a, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PYCR", 0xa405014a, 16,
|
||||
GROUP(-4, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
KEYOUT5_IN5, PTY5_OUT, 0, PTY5_IN,
|
||||
KEYOUT4_IN6, PTY4_OUT, 0, PTY4_IN,
|
||||
KEYOUT3, PTY3_OUT, 0, PTY3_IN,
|
||||
@ -1456,33 +1459,27 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
KEYOUT1, PTY1_OUT, 0, 0,
|
||||
KEYOUT0, PTY0_OUT, 0, PTY0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PZCR", 0xa405014c, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PZCR", 0xa405014c, 16,
|
||||
GROUP(-4, 2, 2, 2, 2, 2, -2),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
KEYIN4_IRQ7, 0, 0, PTZ5_IN,
|
||||
KEYIN3, 0, 0, PTZ4_IN,
|
||||
KEYIN2, 0, 0, PTZ3_IN,
|
||||
KEYIN1, 0, 0, PTZ2_IN,
|
||||
KEYIN0_IRQ6, 0, 0, PTZ1_IN,
|
||||
0, 0, 0, 0 ))
|
||||
/* RESERVED [2] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSELA", 0xa405014e, 16, 1, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PSELA", 0xa405014e, 16,
|
||||
GROUP(1, 1, -4, 1, -4, 1, -4),
|
||||
GROUP(
|
||||
PSA15_KEYIN0, PSA15_IRQ6,
|
||||
PSA14_KEYIN4, PSA14_IRQ7,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [4] */
|
||||
PSA9_IRQ4, PSA9_BS,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [4] */
|
||||
PSA4_IRQ2, PSA4_SDHID2,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0 ))
|
||||
/* RESERVED [4] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSELB", 0xa4050150, 16, 1, GROUP(
|
||||
PSB15_SIOTXD, PSB15_SIUBOSLD,
|
||||
@ -1502,22 +1499,15 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PSB1_SIUMCKA, PSB1_SIOF1_MCK,
|
||||
PSB0_SIUAOSLD, PSB0_SIOF1_TXD ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSELC", 0xa4050152, 16, 1, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PSELC", 0xa4050152, 16,
|
||||
GROUP(1, 1, 1, 1, 1, -10, 1),
|
||||
GROUP(
|
||||
PSC15_SIUAISLD, PSC15_SIOF1_RXD,
|
||||
PSC14_SIUAOBT, PSC14_SIOF1_SCK,
|
||||
PSC13_SIUAOLR, PSC13_SIOF1_SYNC,
|
||||
PSC12_SIUAIBT, PSC12_SIOF1_SS1,
|
||||
PSC11_SIUAILR, PSC11_SIOF1_SS2,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [10] */
|
||||
PSC0_NAF, PSC0_VIO ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSELD", 0xa4050154, 16, 1, GROUP(
|
||||
@ -1538,61 +1528,45 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0,
|
||||
PSD0_LCDD19_LCDD0, PSD0_DV ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSELE", 0xa4050156, 16, 1, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PSELE", 0xa4050156, 16,
|
||||
GROUP(1, 1, 1, 1, 1, -7, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
PSE15_SIOF0_MCK_IRQ3, PSE15_SIM_D,
|
||||
PSE14_SIOF0_TXD_IRDA_OUT, PSE14_SIM_CLK,
|
||||
PSE13_SIOF0_RXD_IRDA_IN, PSE13_TS_SDAT,
|
||||
PSE12_LCDVSYN2, PSE12_DACK,
|
||||
PSE11_SIUMCKA_SIOF1_MCK, PSE11_SIUFCKA,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [7] */
|
||||
PSE3_FLCTL, PSE3_VIO,
|
||||
PSE2_NAF2, PSE2_VIO_D10,
|
||||
PSE1_NAF1, PSE1_VIO_D9,
|
||||
PSE0_NAF0, PSE0_VIO_D8 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("HIZCRA", 0xa4050158, 16, 1, GROUP(
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("HIZCRA", 0xa4050158, 16,
|
||||
GROUP(-1, 1, -3, 1, 1, 1, 1, 1, -6),
|
||||
GROUP(
|
||||
/* RESERVED [1] */
|
||||
HIZA14_KEYSC, HIZA14_HIZ,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [3] */
|
||||
HIZA10_NAF, HIZA10_HIZ,
|
||||
HIZA9_VIO, HIZA9_HIZ,
|
||||
HIZA8_LCDC, HIZA8_HIZ,
|
||||
HIZA7_LCDC, HIZA7_HIZ,
|
||||
HIZA6_LCDC, HIZA6_HIZ,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0 ))
|
||||
/* RESERVED [6] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("HIZCRB", 0xa405015a, 16, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("HIZCRB", 0xa405015a, 16,
|
||||
GROUP(-11, 1, -2, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [11] */
|
||||
HIZB4_SIUA, HIZB4_HIZ,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [2] */
|
||||
HIZB1_VIO, HIZB1_HIZ,
|
||||
HIZB0_VIO, HIZB0_HIZ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("HIZCRC", 0xa405015c, 16, 1, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("HIZCRC", 0xa405015c, 16,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, -8),
|
||||
GROUP(
|
||||
HIZC15_IRQ7, HIZC15_HIZ,
|
||||
HIZC14_IRQ6, HIZC14_HIZ,
|
||||
HIZC13_IRQ5, HIZC13_HIZ,
|
||||
@ -1601,32 +1575,15 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
HIZC10_IRQ2, HIZC10_HIZ,
|
||||
HIZC9_IRQ1, HIZC9_HIZ,
|
||||
HIZC8_IRQ0, HIZC8_HIZ,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0 ))
|
||||
/* RESERVED [8] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("MSELCRB", 0xa4050182, 16, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("MSELCRB", 0xa4050182, 16,
|
||||
GROUP(-6, 1, 1, -8),
|
||||
GROUP(
|
||||
/* RESERVED [6] */
|
||||
MSELB9_VIO, MSELB9_VIO2,
|
||||
MSELB8_RGB, MSELB8_SYS,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0 ))
|
||||
/* RESERVED [8] */ ))
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
@ -5,7 +5,6 @@
|
||||
* Copyright (C) 2008 Magnus Damm
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <cpu/sh7723.h>
|
||||
|
||||
@ -1547,9 +1546,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PTD1_FN, PTD1_OUT, 0, PTD1_IN,
|
||||
PTD0_FN, PTD0_OUT, 0, PTD0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PECR", 0xa4050108, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PECR", 0xa4050108, 16,
|
||||
GROUP(-4, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PTE5_FN, PTE5_OUT, 0, PTE5_IN,
|
||||
PTE4_FN, PTE4_OUT, 0, PTE4_IN,
|
||||
PTE3_FN, PTE3_OUT, 0, PTE3_IN,
|
||||
@ -1567,9 +1567,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PTF1_FN, PTF1_OUT, 0, PTF1_IN,
|
||||
PTF0_FN, PTF0_OUT, 0, PTF0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PGCR", 0xa405010c, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PGCR", 0xa405010c, 16,
|
||||
GROUP(-4, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PTG5_FN, PTG5_OUT, 0, 0,
|
||||
PTG4_FN, PTG4_OUT, 0, 0,
|
||||
PTG3_FN, PTG3_OUT, 0, 0,
|
||||
@ -1587,11 +1588,13 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PTH1_FN, PTH1_OUT, 0, PTH1_IN,
|
||||
PTH0_FN, PTH0_OUT, 0, PTH0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PJCR", 0xa4050110, 16, 2, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PJCR", 0xa4050110, 16,
|
||||
GROUP(2, -2, 2, -2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
PTJ7_FN, PTJ7_OUT, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
PTJ5_FN, PTJ5_OUT, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
PTJ3_FN, PTJ3_OUT, 0, PTJ3_IN,
|
||||
PTJ2_FN, PTJ2_OUT, 0, PTJ2_IN,
|
||||
PTJ1_FN, PTJ1_OUT, 0, PTJ1_IN,
|
||||
@ -1637,11 +1640,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PTN1_FN, PTN1_OUT, 0, PTN1_IN,
|
||||
PTN0_FN, PTN0_OUT, 0, PTN0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PQCR", 0xa405011a, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PQCR", 0xa405011a, 16,
|
||||
GROUP(-8, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [8] */
|
||||
PTQ3_FN, 0, 0, PTQ3_IN,
|
||||
PTQ2_FN, 0, 0, PTQ2_IN,
|
||||
PTQ1_FN, 0, 0, PTQ1_IN,
|
||||
@ -1667,9 +1669,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PTS1_FN, PTS1_OUT, 0, PTS1_IN,
|
||||
PTS0_FN, PTS0_OUT, 0, PTS0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PTCR", 0xa4050140, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PTCR", 0xa4050140, 16,
|
||||
GROUP(-4, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PTT5_FN, PTT5_OUT, 0, PTT5_IN,
|
||||
PTT4_FN, PTT4_OUT, 0, PTT4_IN,
|
||||
PTT3_FN, PTT3_OUT, 0, PTT3_IN,
|
||||
@ -1677,9 +1680,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PTT1_FN, PTT1_OUT, 0, PTT1_IN,
|
||||
PTT0_FN, PTT0_OUT, 0, PTT0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PUCR", 0xa4050142, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PUCR", 0xa4050142, 16,
|
||||
GROUP(-4, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PTU5_FN, PTU5_OUT, 0, PTU5_IN,
|
||||
PTU4_FN, PTU4_OUT, 0, PTU4_IN,
|
||||
PTU3_FN, PTU3_OUT, 0, PTU3_IN,
|
||||
@ -1737,35 +1741,38 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PTZ1_FN, PTZ1_OUT, 0, PTZ1_IN,
|
||||
PTZ0_FN, PTZ0_OUT, 0, PTZ0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSELA", 0xa405014e, 16, 2, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PSELA", 0xa405014e, 16,
|
||||
GROUP(2, 2, 2, -4, 2, 2, -2),
|
||||
GROUP(
|
||||
PSA15_PSA14_FN1, PSA15_PSA14_FN2, 0, 0,
|
||||
PSA13_PSA12_FN1, PSA13_PSA12_FN2, 0, 0,
|
||||
PSA11_PSA10_FN1, PSA11_PSA10_FN2, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [4] */
|
||||
PSA5_PSA4_FN1, PSA5_PSA4_FN2, PSA5_PSA4_FN3, 0,
|
||||
PSA3_PSA2_FN1, PSA3_PSA2_FN2, 0, 0,
|
||||
0, 0, 0, 0 ))
|
||||
/* RESERVED [2] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSELB", 0xa4050150, 16, 2, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PSELB", 0xa4050150, 16,
|
||||
GROUP(2, 2, -2, 2, 2, 2, 2, -2),
|
||||
GROUP(
|
||||
PSB15_PSB14_FN1, PSB15_PSB14_FN2, 0, 0,
|
||||
PSB13_PSB12_LCDC_RGB, PSB13_PSB12_LCDC_SYS, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
/* RESERVED [2] */
|
||||
PSB9_PSB8_FN1, PSB9_PSB8_FN2, PSB9_PSB8_FN3, 0,
|
||||
PSB7_PSB6_FN1, PSB7_PSB6_FN2, 0, 0,
|
||||
PSB5_PSB4_FN1, PSB5_PSB4_FN2, 0, 0,
|
||||
PSB3_PSB2_FN1, PSB3_PSB2_FN2, 0, 0,
|
||||
0, 0, 0, 0 ))
|
||||
/* RESERVED [2] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSELC", 0xa4050152, 16, 2, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PSELC", 0xa4050152, 16,
|
||||
GROUP(2, 2, 2, 2, 2, -6),
|
||||
GROUP(
|
||||
PSC15_PSC14_FN1, PSC15_PSC14_FN2, 0, 0,
|
||||
PSC13_PSC12_FN1, PSC13_PSC12_FN2, 0, 0,
|
||||
PSC11_PSC10_FN1, PSC11_PSC10_FN2, PSC11_PSC10_FN3, 0,
|
||||
PSC9_PSC8_FN1, PSC9_PSC8_FN2, 0, 0,
|
||||
PSC7_PSC6_FN1, PSC7_PSC6_FN2, PSC7_PSC6_FN3, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0 ))
|
||||
/* RESERVED [3] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSELD", 0xa4050154, 16, 2, GROUP(
|
||||
PSD15_PSD14_FN1, PSD15_PSD14_FN2, 0, 0,
|
||||
|
@ -10,7 +10,6 @@
|
||||
* Copyright (C) 2008 Magnus Damm
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <cpu/sh7724.h>
|
||||
|
||||
@ -1799,9 +1798,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PTF1_FN, PTF1_OUT, 0, PTF1_IN,
|
||||
PTF0_FN, PTF0_OUT, 0, PTF0_IN ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PGCR", 0xa405010c, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PGCR", 0xa405010c, 16,
|
||||
GROUP(-4, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PTG5_FN, PTG5_OUT, 0, 0,
|
||||
PTG4_FN, PTG4_OUT, 0, 0,
|
||||
PTG3_FN, PTG3_OUT, 0, 0,
|
||||
|
@ -5,7 +5,6 @@
|
||||
* Copyright (C) 2012 Renesas Solutions Corp.
|
||||
* Copyright (C) 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <cpu/sh7734.h>
|
||||
|
||||
@ -1806,16 +1805,13 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
GP_4_1_FN, FN_IP9_21_20,
|
||||
GP_4_0_FN, FN_IP9_19_18 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("GPSR5", 0xFFFC0018, 32, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, /* 31 - 28 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, /* 27 - 24 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, /* 23 - 20 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, /* 19 - 16 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, /* 15 - 12 */
|
||||
{ PINMUX_CFG_REG_VAR("GPSR5", 0xFFFC0018, 32,
|
||||
GROUP(-20, 1, 1, -6, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP5_31_12 RESERVED */
|
||||
GP_5_11_FN, FN_IP10_29_28,
|
||||
GP_5_10_FN, FN_IP10_27_26,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, /* 9 - 6 */
|
||||
0, 0, 0, 0, /* 5, 4 */
|
||||
/* GP5_9_4 RESERVED */
|
||||
GP_5_3_FN, FN_IRQ3_B,
|
||||
GP_5_2_FN, FN_IRQ2_B,
|
||||
GP_5_1_FN, FN_IP11_3,
|
||||
@ -1896,10 +1892,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_A16, FN_ST0_PWM, FN_LCD_DON_A, FN_TIOC4A_C ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR2", 0xFFFC0024, 32,
|
||||
GROUP(1, 3, 3, 2, 3, 3, 3, 3, 3, 3, 2, 3),
|
||||
GROUP(-1, 3, 3, 2, 3, 3, 3, 3, 3, 3, 2, 3),
|
||||
GROUP(
|
||||
/* IP2_31 [1] */
|
||||
0, 0,
|
||||
/* IP2_31 [1] RESERVED */
|
||||
/* IP2_30_28 [3] */
|
||||
FN_D14, FN_TX2_B, 0, FN_FSE_A,
|
||||
FN_ET0_TX_CLK_B, 0, 0, 0,
|
||||
@ -1933,10 +1928,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_FD4_A, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR3", 0xFFFC0028, 32,
|
||||
GROUP(2, 3, 3, 3, 1, 2, 3, 3, 3, 3, 3, 1, 2),
|
||||
GROUP(-2, 3, 3, 3, 1, 2, 3, 3, 3, 3, 3, 1, 2),
|
||||
GROUP(
|
||||
/* IP3_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP3_31_30 [2] RESERVED */
|
||||
/* IP3_29_27 [3] */
|
||||
FN_DRACK0, FN_SD1_DAT2_A, FN_ATAG, FN_TCLK1_A,
|
||||
FN_ET0_ETXD7, 0, 0, 0,
|
||||
@ -2007,19 +2001,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_ET0_ERXD7, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR5", 0xFFFC0030, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3,
|
||||
3, 3, 3),
|
||||
GROUP(-5, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP5_31 [1] */
|
||||
0, 0,
|
||||
/* IP5_30 [1] */
|
||||
0, 0,
|
||||
/* IP5_29 [1] */
|
||||
0, 0,
|
||||
/* IP5_28 [1] */
|
||||
0, 0,
|
||||
/* IP5_27 [1] */
|
||||
0, 0,
|
||||
/* IP5_31_27 [5] RESERVED */
|
||||
/* IP5_26_25 [2] */
|
||||
FN_REF50CK, FN_CTS1_E, FN_HCTS0_D, 0,
|
||||
/* IP5_24_23 [2] */
|
||||
@ -2049,25 +2033,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_ET0_RX_CLK_B, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR6", 0xFFFC0034, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 2,
|
||||
2, 2, 2, 2, 3, 3),
|
||||
GROUP(-8, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3),
|
||||
GROUP(
|
||||
/* IP5_31 [1] */
|
||||
0, 0,
|
||||
/* IP6_30 [1] */
|
||||
0, 0,
|
||||
/* IP6_29 [1] */
|
||||
0, 0,
|
||||
/* IP6_28 [1] */
|
||||
0, 0,
|
||||
/* IP6_27 [1] */
|
||||
0, 0,
|
||||
/* IP6_26 [1] */
|
||||
0, 0,
|
||||
/* IP6_25 [1] */
|
||||
0, 0,
|
||||
/* IP6_24 [1] */
|
||||
0, 0,
|
||||
/* IP5_31_24 [8] RESERVED */
|
||||
/* IP6_23_21 [3] */
|
||||
FN_DU0_DG1, FN_CTS1_C, FN_HRTS0_D, FN_TIOC1B_A,
|
||||
FN_HIFD09, 0, 0, 0,
|
||||
@ -2094,10 +2062,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_TCLKA_A, FN_HIFD00, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR7", 0xFFFC0038, 32,
|
||||
GROUP(1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(-1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP7_31 [1] */
|
||||
0, 0,
|
||||
/* IP7_31 [1] RESERVED */
|
||||
/* IP7_30_29 [2] */
|
||||
FN_DU0_DB4, 0, FN_HIFINT, 0,
|
||||
/* IP7_28_27 [2] */
|
||||
@ -2131,11 +2098,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_HIFD10, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR8", 0xFFFC003C, 32,
|
||||
GROUP(2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2,
|
||||
GROUP(-2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2),
|
||||
GROUP(
|
||||
/* IP9_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP9_31_30 [2] RESERVED */
|
||||
/* IP8_29_28 [2] */
|
||||
FN_IRQ3_A, FN_RTS0_A, FN_HRTS0_B, FN_ET0_ERXD3_A,
|
||||
/* IP8_27_26 [2] */
|
||||
@ -2169,11 +2135,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_DU0_DB5, 0, FN_HIFDREQ, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR9", 0xFFFC0040, 32,
|
||||
GROUP(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
GROUP(-2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* IP9_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP9_31_30 [2] RESERVED */
|
||||
/* IP9_29_28 [2] */
|
||||
FN_SSI_SDATA1_A, FN_VI1_3_B, FN_LCD_DATA14_B, 0,
|
||||
/* IP9_27_26 [2] */
|
||||
@ -2206,10 +2171,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_VI1_CLK_A, 0, FN_FD0_B, FN_LCD_DATA0_B ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR10", 0xFFFC0044, 32,
|
||||
GROUP(2, 2, 2, 1, 2, 1, 3, 3, 1, 3, 3, 3, 3, 3),
|
||||
GROUP(-2, 2, 2, 1, 2, 1, 3, 3, 1, 3, 3, 3, 3, 3),
|
||||
GROUP(
|
||||
/* IP9_31_30 [2] */
|
||||
0, 0, 0, 0,
|
||||
/* IP9_31_30 [2] RESERVED */
|
||||
/* IP10_29_28 [2] */
|
||||
FN_CAN1_TX_A, FN_TX5_C, FN_MLB_DAT, 0,
|
||||
/* IP10_27_26 [2] */
|
||||
@ -2245,11 +2209,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_LCD_DATA15_B, 0, 0, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("IPSR11", 0xFFFC0048, 32,
|
||||
GROUP(3, 1, 2, 3, 2, 2, 3, 3, 1, 2, 3, 3,
|
||||
GROUP(-3, 1, 2, 3, 2, 2, 3, 3, 1, 2, 3, 3,
|
||||
1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* IP11_31_29 [3] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* IP11_31_29 [3] RESERVED */
|
||||
/* IP11_28 [1] */
|
||||
FN_PRESETOUT, FN_ST_CLKOUT,
|
||||
/* IP11_27_26 [2] */
|
||||
@ -2287,11 +2250,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SCL1, FN_SCIF_CLK_C ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL1", 0xFFFC004C, 32,
|
||||
GROUP(3, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2,
|
||||
GROUP(-3, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2,
|
||||
2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* SEL1_31_29 [3] */
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
/* SEL1_31_29 [3] RESERVED */
|
||||
/* SEL1_28 [1] */
|
||||
FN_SEL_IEBUS_0, FN_SEL_IEBUS_1,
|
||||
/* SEL1_27 [1] */
|
||||
@ -2344,25 +2306,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
FN_SEL_INTC_0, FN_SEL_INTC_1 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG_VAR("MOD_SEL2", 0xFFFC0050, 32,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
|
||||
2, 1, 2, 2, 3, 2, 3, 2, 2),
|
||||
GROUP(-8, 1, 1, 1, 2, 2, 1, 2, 2, 3, 2, 3, 2, 2),
|
||||
GROUP(
|
||||
/* SEL2_31 [1] */
|
||||
0, 0,
|
||||
/* SEL2_30 [1] */
|
||||
0, 0,
|
||||
/* SEL2_29 [1] */
|
||||
0, 0,
|
||||
/* SEL2_28 [1] */
|
||||
0, 0,
|
||||
/* SEL2_27 [1] */
|
||||
0, 0,
|
||||
/* SEL2_26 [1] */
|
||||
0, 0,
|
||||
/* SEL2_25 [1] */
|
||||
0, 0,
|
||||
/* SEL2_24 [1] */
|
||||
0, 0,
|
||||
/* SEL2_31_24 [8] RESERVED */
|
||||
/* SEL2_23 [1] */
|
||||
FN_SEL_MTU2_CLK_0, FN_SEL_MTU2_CLK_1,
|
||||
/* SEL2_22 [1] */
|
||||
@ -2403,10 +2349,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
},
|
||||
{ PINMUX_CFG_REG("INOUTSEL4", 0xFFC44004, 32, 1, GROUP(GP_INOUTSEL(4)))
|
||||
},
|
||||
{ PINMUX_CFG_REG("INOUTSEL5", 0xffc45004, 32, 1, GROUP(
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 31 - 24 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 23 - 16 */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, /* 15 - 12 */
|
||||
{ PINMUX_CFG_REG_VAR("INOUTSEL5", 0xffc45004, 32,
|
||||
GROUP(-20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
GROUP(
|
||||
/* GP5_31_12 RESERVED */
|
||||
GP_5_11_IN, GP_5_11_OUT,
|
||||
GP_5_10_IN, GP_5_10_OUT,
|
||||
GP_5_9_IN, GP_5_9_OUT,
|
||||
|
@ -10,7 +10,6 @@
|
||||
* Copyright (C) 2008 Magnus Damm
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <cpu/sh7757.h>
|
||||
|
||||
@ -1964,43 +1963,35 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
0, 0,
|
||||
0, 0, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSEL1", 0xffec0072, 16, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PSEL1", 0xffec0072, 16,
|
||||
GROUP(-5, 1, 1, 1, -5, 1, -2),
|
||||
GROUP(
|
||||
/* RESERVED [5] */
|
||||
PS1_10_FN1, PS1_10_FN2,
|
||||
PS1_9_FN1, PS1_9_FN2,
|
||||
PS1_8_FN1, PS1_8_FN2,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [5] */
|
||||
PS1_2_FN1, PS1_2_FN2,
|
||||
0, 0,
|
||||
0, 0, ))
|
||||
/* RESERVED [2] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSEL2", 0xffec0074, 16, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PSEL2", 0xffec0074, 16,
|
||||
GROUP(-2, 1, 1, -4, 1, 1, 1, 1, -1, 1, -2),
|
||||
GROUP(
|
||||
/* RESERVED [2] */
|
||||
PS2_13_FN1, PS2_13_FN2,
|
||||
PS2_12_FN1, PS2_12_FN2,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [4] */
|
||||
PS2_7_FN1, PS2_7_FN2,
|
||||
PS2_6_FN1, PS2_6_FN2,
|
||||
PS2_5_FN1, PS2_5_FN2,
|
||||
PS2_4_FN1, PS2_4_FN2,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
PS2_2_FN1, PS2_2_FN2,
|
||||
0, 0,
|
||||
0, 0, ))
|
||||
/* RESERVED [2] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSEL3", 0xffec0076, 16, 1, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PSEL3", 0xffec0076, 16,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, 1, -4, 1, 1, -1),
|
||||
GROUP(
|
||||
PS3_15_FN1, PS3_15_FN2,
|
||||
PS3_14_FN1, PS3_14_FN2,
|
||||
PS3_13_FN1, PS3_13_FN2,
|
||||
@ -2010,38 +2001,35 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PS3_9_FN1, PS3_9_FN2,
|
||||
PS3_8_FN1, PS3_8_FN2,
|
||||
PS3_7_FN1, PS3_7_FN2,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [4] */
|
||||
PS3_2_FN1, PS3_2_FN2,
|
||||
PS3_1_FN1, PS3_1_FN2,
|
||||
0, 0, ))
|
||||
/* RESERVED [1] */ ))
|
||||
},
|
||||
|
||||
{ PINMUX_CFG_REG("PSEL4", 0xffec0078, 16, 1, GROUP(
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PSEL4", 0xffec0078, 16,
|
||||
GROUP(-1, 1, 1, 1, -1, 1, 1, 1, -3, 1, 1, 1,
|
||||
1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [1] */
|
||||
PS4_14_FN1, PS4_14_FN2,
|
||||
PS4_13_FN1, PS4_13_FN2,
|
||||
PS4_12_FN1, PS4_12_FN2,
|
||||
0, 0,
|
||||
/* RESERVED [1] */
|
||||
PS4_10_FN1, PS4_10_FN2,
|
||||
PS4_9_FN1, PS4_9_FN2,
|
||||
PS4_8_FN1, PS4_8_FN2,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
/* RESERVED [3] */
|
||||
PS4_4_FN1, PS4_4_FN2,
|
||||
PS4_3_FN1, PS4_3_FN2,
|
||||
PS4_2_FN1, PS4_2_FN2,
|
||||
PS4_1_FN1, PS4_1_FN2,
|
||||
PS4_0_FN1, PS4_0_FN2, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSEL5", 0xffec007a, 16, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PSEL5", 0xffec007a, 16,
|
||||
GROUP(-4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -2),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PS5_11_FN1, PS5_11_FN2,
|
||||
PS5_10_FN1, PS5_10_FN2,
|
||||
PS5_9_FN1, PS5_9_FN2,
|
||||
@ -2052,8 +2040,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PS5_4_FN1, PS5_4_FN2,
|
||||
PS5_3_FN1, PS5_3_FN2,
|
||||
PS5_2_FN1, PS5_2_FN2,
|
||||
0, 0,
|
||||
0, 0, ))
|
||||
/* RESERVED [2] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSEL6", 0xffec007c, 16, 1, GROUP(
|
||||
PS6_15_FN1, PS6_15_FN2,
|
||||
@ -2073,7 +2060,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PS6_1_FN1, PS6_1_FN2,
|
||||
PS6_0_FN1, PS6_0_FN2, ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSEL7", 0xffec0082, 16, 1, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PSEL7", 0xffec0082, 16,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -5),
|
||||
GROUP(
|
||||
PS7_15_FN1, PS7_15_FN2,
|
||||
PS7_14_FN1, PS7_14_FN2,
|
||||
PS7_13_FN1, PS7_13_FN2,
|
||||
@ -2085,13 +2074,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PS7_7_FN1, PS7_7_FN2,
|
||||
PS7_6_FN1, PS7_6_FN2,
|
||||
PS7_5_FN1, PS7_5_FN2,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0, ))
|
||||
/* RESERVED [5] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PSEL8", 0xffec0084, 16, 1, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PSEL8", 0xffec0084, 16,
|
||||
GROUP(1, 1, 1, 1, 1, 1, 1, 1, -8),
|
||||
GROUP(
|
||||
PS8_15_FN1, PS8_15_FN2,
|
||||
PS8_14_FN1, PS8_14_FN2,
|
||||
PS8_13_FN1, PS8_13_FN2,
|
||||
@ -2100,14 +2087,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PS8_10_FN1, PS8_10_FN2,
|
||||
PS8_9_FN1, PS8_9_FN2,
|
||||
PS8_8_FN1, PS8_8_FN2,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0, ))
|
||||
/* RESERVED [8] */ ))
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
@ -5,7 +5,6 @@
|
||||
* Copyright (C) 2008 Magnus Damm
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <cpu/sh7785.h>
|
||||
|
||||
@ -1025,9 +1024,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PD1_FN, PD1_OUT, PD1_IN, 0,
|
||||
PD0_FN, PD0_OUT, PD0_IN, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PECR", 0xffe70008, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PECR", 0xffe70008, 16,
|
||||
GROUP(-4, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PE5_FN, PE5_OUT, PE5_IN, 0,
|
||||
PE4_FN, PE4_OUT, PE4_IN, 0,
|
||||
PE3_FN, PE3_OUT, PE3_IN, 0,
|
||||
@ -1095,13 +1095,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PL1_FN, PL1_OUT, PL1_IN, 0,
|
||||
PL0_FN, PL0_OUT, PL0_IN, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PMCR", 0xffe70016, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PMCR", 0xffe70016, 16,
|
||||
GROUP(-12, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [12] */
|
||||
PM1_FN, PM1_OUT, PM1_IN, 0,
|
||||
PM0_FN, PM0_OUT, PM0_IN, 0 ))
|
||||
},
|
||||
@ -1115,9 +1112,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PN1_FN, PN1_OUT, PN1_IN, 0,
|
||||
PN0_FN, PN0_OUT, PN0_IN, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PPCR", 0xffe7001a, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PPCR", 0xffe7001a, 16,
|
||||
GROUP(-4, 2, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [4] */
|
||||
PP5_FN, PP5_OUT, PP5_IN, 0,
|
||||
PP4_FN, PP4_OUT, PP4_IN, 0,
|
||||
PP3_FN, PP3_OUT, PP3_IN, 0,
|
||||
@ -1125,21 +1123,20 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PP1_FN, PP1_OUT, PP1_IN, 0,
|
||||
PP0_FN, PP0_OUT, PP0_IN, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PQCR", 0xffe7001c, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PQCR", 0xffe7001c, 16,
|
||||
GROUP(-6, 2, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [6] */
|
||||
PQ4_FN, PQ4_OUT, PQ4_IN, 0,
|
||||
PQ3_FN, PQ3_OUT, PQ3_IN, 0,
|
||||
PQ2_FN, PQ2_OUT, PQ2_IN, 0,
|
||||
PQ1_FN, PQ1_OUT, PQ1_IN, 0,
|
||||
PQ0_FN, PQ0_OUT, PQ0_IN, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PRCR", 0xffe7001e, 16, 2, GROUP(
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("PRCR", 0xffe7001e, 16,
|
||||
GROUP(-8, 2, 2, 2, 2),
|
||||
GROUP(
|
||||
/* RESERVED [8] */
|
||||
PR3_FN, PR3_OUT, PR3_IN, 0,
|
||||
PR2_FN, PR2_OUT, PR2_IN, 0,
|
||||
PR1_FN, PR1_OUT, PR1_IN, 0,
|
||||
@ -1163,20 +1160,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
P1MSEL1_0, P1MSEL1_1,
|
||||
P1MSEL0_0, P1MSEL0_1 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("P2MSELR", 0xffe70082, 16, 1, GROUP(
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
{ PINMUX_CFG_REG_VAR("P2MSELR", 0xffe70082, 16,
|
||||
GROUP(-13, 1, 1, 1),
|
||||
GROUP(
|
||||
/* RESERVED [13] */
|
||||
P2MSEL2_0, P2MSEL2_1,
|
||||
P2MSEL1_0, P2MSEL1_1,
|
||||
P2MSEL0_0, P2MSEL0_1 ))
|
||||
|
@ -10,7 +10,6 @@
|
||||
* Copyright (C) 2008 Magnus Damm
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <cpu/sh7786.h>
|
||||
|
||||
@ -667,15 +666,12 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PD1_FN, PD1_OUT, PD1_IN, 0,
|
||||
PD0_FN, PD0_OUT, PD0_IN, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PECR", 0xffcc0008, 16, 2, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PECR", 0xffcc0008, 16,
|
||||
GROUP(2, 2, -12),
|
||||
GROUP(
|
||||
PE7_FN, PE7_OUT, PE7_IN, 0,
|
||||
PE6_FN, PE6_OUT, PE6_IN, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0, ))
|
||||
/* RESERVED [12] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PFCR", 0xffcc000a, 16, 2, GROUP(
|
||||
PF7_FN, PF7_OUT, PF7_IN, 0,
|
||||
@ -687,15 +683,13 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||
PF1_FN, PF1_OUT, PF1_IN, 0,
|
||||
PF0_FN, PF0_OUT, PF0_IN, 0 ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PGCR", 0xffcc000c, 16, 2, GROUP(
|
||||
{ PINMUX_CFG_REG_VAR("PGCR", 0xffcc000c, 16,
|
||||
GROUP(2, 2, 2, -10),
|
||||
GROUP(
|
||||
PG7_FN, PG7_OUT, PG7_IN, 0,
|
||||
PG6_FN, PG6_OUT, PG6_IN, 0,
|
||||
PG5_FN, PG5_OUT, PG5_IN, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0, ))
|
||||
/* RESERVED [10] */ ))
|
||||
},
|
||||
{ PINMUX_CFG_REG("PHCR", 0xffcc000e, 16, 2, GROUP(
|
||||
PH7_FN, PH7_OUT, PH7_IN, 0,
|
||||
|
@ -4,7 +4,6 @@
|
||||
*
|
||||
* Copyright (C) 2010 Paul Mundt
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <cpu/shx3.h>
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <linux/pinctrl/pinconf-generic.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/pinctrl/pinmux.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include "../core.h"
|
||||
@ -1154,21 +1155,6 @@ static const struct pinmux_ops rza1_pinmux_ops = {
|
||||
* RZ/A1 pin controller driver operations
|
||||
*/
|
||||
|
||||
static unsigned int rza1_count_gpio_chips(struct device_node *np)
|
||||
{
|
||||
struct device_node *child;
|
||||
unsigned int count = 0;
|
||||
|
||||
for_each_child_of_node(np, child) {
|
||||
if (!of_property_read_bool(child, "gpio-controller"))
|
||||
continue;
|
||||
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* rza1_parse_gpiochip() - parse and register a gpio chip and pin range
|
||||
*
|
||||
@ -1176,22 +1162,22 @@ static unsigned int rza1_count_gpio_chips(struct device_node *np)
|
||||
* defined by gpio device tree binding documentation.
|
||||
*
|
||||
* @rza1_pctl: RZ/A1 pin controller device
|
||||
* @np: of gpio-controller node
|
||||
* @fwnode: gpio-controller firmware node
|
||||
* @chip: gpio chip to register to gpiolib
|
||||
* @range: pin range to register to pinctrl core
|
||||
*/
|
||||
static int rza1_parse_gpiochip(struct rza1_pinctrl *rza1_pctl,
|
||||
struct device_node *np,
|
||||
struct fwnode_handle *fwnode,
|
||||
struct gpio_chip *chip,
|
||||
struct pinctrl_gpio_range *range)
|
||||
{
|
||||
const char *list_name = "gpio-ranges";
|
||||
struct of_phandle_args of_args;
|
||||
struct fwnode_reference_args args;
|
||||
unsigned int gpioport;
|
||||
u32 pinctrl_base;
|
||||
int ret;
|
||||
|
||||
ret = of_parse_phandle_with_fixed_args(np, list_name, 3, 0, &of_args);
|
||||
ret = fwnode_property_get_reference_args(fwnode, list_name, NULL, 3, 0, &args);
|
||||
if (ret) {
|
||||
dev_err(rza1_pctl->dev, "Unable to parse %s list property\n",
|
||||
list_name);
|
||||
@ -1202,7 +1188,7 @@ static int rza1_parse_gpiochip(struct rza1_pinctrl *rza1_pctl,
|
||||
* Find out on which port this gpio-chip maps to by inspecting the
|
||||
* second argument of the "gpio-ranges" property.
|
||||
*/
|
||||
pinctrl_base = of_args.args[1];
|
||||
pinctrl_base = args.args[1];
|
||||
gpioport = RZA1_PIN_ID_TO_PORT(pinctrl_base);
|
||||
if (gpioport >= RZA1_NPORTS) {
|
||||
dev_err(rza1_pctl->dev,
|
||||
@ -1212,19 +1198,18 @@ static int rza1_parse_gpiochip(struct rza1_pinctrl *rza1_pctl,
|
||||
|
||||
*chip = rza1_gpiochip_template;
|
||||
chip->base = -1;
|
||||
chip->label = devm_kasprintf(rza1_pctl->dev, GFP_KERNEL, "%pOFn",
|
||||
np);
|
||||
chip->ngpio = args.args[2];
|
||||
chip->label = devm_kasprintf(rza1_pctl->dev, GFP_KERNEL, "%pfwP", fwnode);
|
||||
if (!chip->label)
|
||||
return -ENOMEM;
|
||||
|
||||
chip->ngpio = of_args.args[2];
|
||||
chip->of_node = np;
|
||||
chip->fwnode = fwnode;
|
||||
chip->parent = rza1_pctl->dev;
|
||||
|
||||
range->id = gpioport;
|
||||
range->name = chip->label;
|
||||
range->pin_base = range->base = pinctrl_base;
|
||||
range->npins = of_args.args[2];
|
||||
range->npins = args.args[2];
|
||||
range->gc = chip;
|
||||
|
||||
ret = devm_gpiochip_add_data(rza1_pctl->dev, chip,
|
||||
@ -1247,15 +1232,14 @@ static int rza1_parse_gpiochip(struct rza1_pinctrl *rza1_pctl,
|
||||
*/
|
||||
static int rza1_gpio_register(struct rza1_pinctrl *rza1_pctl)
|
||||
{
|
||||
struct device_node *np = rza1_pctl->dev->of_node;
|
||||
struct pinctrl_gpio_range *gpio_ranges;
|
||||
struct gpio_chip *gpio_chips;
|
||||
struct device_node *child;
|
||||
struct fwnode_handle *child;
|
||||
unsigned int ngpiochips;
|
||||
unsigned int i;
|
||||
int ret;
|
||||
|
||||
ngpiochips = rza1_count_gpio_chips(np);
|
||||
ngpiochips = gpiochip_node_count(rza1_pctl->dev);
|
||||
if (ngpiochips == 0) {
|
||||
dev_dbg(rza1_pctl->dev, "No gpiochip registered\n");
|
||||
return 0;
|
||||
@ -1269,14 +1253,11 @@ static int rza1_gpio_register(struct rza1_pinctrl *rza1_pctl)
|
||||
return -ENOMEM;
|
||||
|
||||
i = 0;
|
||||
for_each_child_of_node(np, child) {
|
||||
if (!of_property_read_bool(child, "gpio-controller"))
|
||||
continue;
|
||||
|
||||
for_each_gpiochip_node(rza1_pctl->dev, child) {
|
||||
ret = rza1_parse_gpiochip(rza1_pctl, child, &gpio_chips[i],
|
||||
&gpio_ranges[i]);
|
||||
if (ret) {
|
||||
of_node_put(child);
|
||||
fwnode_handle_put(child);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -9,8 +9,10 @@
|
||||
#include <linux/clk.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/pinctrl/pinconf-generic.h>
|
||||
#include <linux/pinctrl/pinconf.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
@ -89,6 +91,7 @@
|
||||
#define PIN(n) (0x0800 + 0x10 + (n))
|
||||
#define IOLH(n) (0x1000 + (n) * 8)
|
||||
#define IEN(n) (0x1800 + (n) * 8)
|
||||
#define ISEL(n) (0x2c80 + (n) * 8)
|
||||
#define PWPR (0x3014)
|
||||
#define SD_CH(n) (0x3000 + (n) * 4)
|
||||
#define QSPI (0x3008)
|
||||
@ -112,6 +115,10 @@
|
||||
#define RZG2L_PIN_ID_TO_PORT_OFFSET(id) (RZG2L_PIN_ID_TO_PORT(id) + 0x10)
|
||||
#define RZG2L_PIN_ID_TO_PIN(id) ((id) % RZG2L_PINS_PER_PORT)
|
||||
|
||||
#define RZG2L_TINT_MAX_INTERRUPT 32
|
||||
#define RZG2L_TINT_IRQ_START_INDEX 9
|
||||
#define RZG2L_PACK_HWIRQ(t, i) (((t) << 16) | (i))
|
||||
|
||||
struct rzg2l_dedicated_configs {
|
||||
const char *name;
|
||||
u32 config;
|
||||
@ -137,6 +144,9 @@ struct rzg2l_pinctrl {
|
||||
|
||||
struct gpio_chip gpio_chip;
|
||||
struct pinctrl_gpio_range gpio_range;
|
||||
DECLARE_BITMAP(tint_slot, RZG2L_TINT_MAX_INTERRUPT);
|
||||
spinlock_t bitmap_lock;
|
||||
unsigned int hwirq[RZG2L_TINT_MAX_INTERRUPT];
|
||||
|
||||
spinlock_t lock;
|
||||
};
|
||||
@ -517,6 +527,8 @@ static int rzg2l_pinctrl_pinconf_get(struct pinctrl_dev *pctldev,
|
||||
if (!(cfg & PIN_CFG_IEN))
|
||||
return -EINVAL;
|
||||
arg = rzg2l_read_pin_config(pctrl, IEN(port_offset), bit, IEN_MASK);
|
||||
if (!arg)
|
||||
return -EINVAL;
|
||||
break;
|
||||
|
||||
case PIN_CONFIG_POWER_SOURCE: {
|
||||
@ -883,8 +895,14 @@ static int rzg2l_gpio_get(struct gpio_chip *chip, unsigned int offset)
|
||||
|
||||
static void rzg2l_gpio_free(struct gpio_chip *chip, unsigned int offset)
|
||||
{
|
||||
unsigned int virq;
|
||||
|
||||
pinctrl_gpio_free(chip->base + offset);
|
||||
|
||||
virq = irq_find_mapping(chip->irq.domain, offset);
|
||||
if (virq)
|
||||
irq_dispose_mapping(virq);
|
||||
|
||||
/*
|
||||
* Set the GPIO as an input to ensure that the next GPIO request won't
|
||||
* drive the GPIO pin as an output.
|
||||
@ -996,93 +1014,329 @@ static const u32 rzg2l_gpio_configs[] = {
|
||||
RZG2L_GPIO_PORT_PACK(5, 0x40, RZG2L_MPXED_PIN_FUNCS),
|
||||
};
|
||||
|
||||
static struct rzg2l_dedicated_configs rzg2l_dedicated_pins[] = {
|
||||
{ "NMI", RZG2L_SINGLE_PIN_PACK(0x1, 0,
|
||||
(PIN_CFG_FILONOFF | PIN_CFG_FILNUM | PIN_CFG_FILCLKSEL)) },
|
||||
{ "TMS/SWDIO", RZG2L_SINGLE_PIN_PACK(0x2, 0,
|
||||
(PIN_CFG_SR | PIN_CFG_IOLH_A | PIN_CFG_IEN)) },
|
||||
{ "TDO", RZG2L_SINGLE_PIN_PACK(0x3, 0,
|
||||
(PIN_CFG_IOLH_A | PIN_CFG_SR | PIN_CFG_IEN)) },
|
||||
{ "AUDIO_CLK1", RZG2L_SINGLE_PIN_PACK(0x4, 0, PIN_CFG_IEN) },
|
||||
{ "AUDIO_CLK2", RZG2L_SINGLE_PIN_PACK(0x4, 1, PIN_CFG_IEN) },
|
||||
{ "SD0_CLK", RZG2L_SINGLE_PIN_PACK(0x6, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_CMD", RZG2L_SINGLE_PIN_PACK(0x6, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_RST#", RZG2L_SINGLE_PIN_PACK(0x6, 2,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA0", RZG2L_SINGLE_PIN_PACK(0x7, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA1", RZG2L_SINGLE_PIN_PACK(0x7, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA2", RZG2L_SINGLE_PIN_PACK(0x7, 2,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA3", RZG2L_SINGLE_PIN_PACK(0x7, 3,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA4", RZG2L_SINGLE_PIN_PACK(0x7, 4,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA5", RZG2L_SINGLE_PIN_PACK(0x7, 5,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA6", RZG2L_SINGLE_PIN_PACK(0x7, 6,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA7", RZG2L_SINGLE_PIN_PACK(0x7, 7,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD1_CLK", RZG2L_SINGLE_PIN_PACK(0x8, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_SD1)) },
|
||||
{ "SD1_CMD", RZG2L_SINGLE_PIN_PACK(0x8, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) },
|
||||
{ "SD1_DATA0", RZG2L_SINGLE_PIN_PACK(0x9, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) },
|
||||
{ "SD1_DATA1", RZG2L_SINGLE_PIN_PACK(0x9, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) },
|
||||
{ "SD1_DATA2", RZG2L_SINGLE_PIN_PACK(0x9, 2,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) },
|
||||
{ "SD1_DATA3", RZG2L_SINGLE_PIN_PACK(0x9, 3,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) },
|
||||
{ "QSPI0_SPCLK", RZG2L_SINGLE_PIN_PACK(0xa, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI0_IO0", RZG2L_SINGLE_PIN_PACK(0xa, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI0_IO1", RZG2L_SINGLE_PIN_PACK(0xa, 2,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI0_IO2", RZG2L_SINGLE_PIN_PACK(0xa, 3,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI0_IO3", RZG2L_SINGLE_PIN_PACK(0xa, 4,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI0_SSL", RZG2L_SINGLE_PIN_PACK(0xa, 5,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI1_SPCLK", RZG2L_SINGLE_PIN_PACK(0xb, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI1_IO0", RZG2L_SINGLE_PIN_PACK(0xb, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI1_IO1", RZG2L_SINGLE_PIN_PACK(0xb, 2,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI1_IO2", RZG2L_SINGLE_PIN_PACK(0xb, 3,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI1_IO3", RZG2L_SINGLE_PIN_PACK(0xb, 4,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI1_SSL", RZG2L_SINGLE_PIN_PACK(0xb, 5,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI_RESET#", RZG2L_SINGLE_PIN_PACK(0xc, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI_WP#", RZG2L_SINGLE_PIN_PACK(0xc, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI_INT#", RZG2L_SINGLE_PIN_PACK(0xc, 2, (PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "WDTOVF_PERROUT#", RZG2L_SINGLE_PIN_PACK(0xd, 0, (PIN_CFG_IOLH_A | PIN_CFG_SR)) },
|
||||
{ "RIIC0_SDA", RZG2L_SINGLE_PIN_PACK(0xe, 0, PIN_CFG_IEN) },
|
||||
{ "RIIC0_SCL", RZG2L_SINGLE_PIN_PACK(0xe, 1, PIN_CFG_IEN) },
|
||||
{ "RIIC1_SDA", RZG2L_SINGLE_PIN_PACK(0xe, 2, PIN_CFG_IEN) },
|
||||
{ "RIIC1_SCL", RZG2L_SINGLE_PIN_PACK(0xe, 3, PIN_CFG_IEN) },
|
||||
static const u32 r9a07g043_gpio_configs[] = {
|
||||
RZG2L_GPIO_PORT_PACK(4, 0x10, RZG2L_MPXED_PIN_FUNCS),
|
||||
RZG2L_GPIO_PORT_PACK(5, 0x11, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)),
|
||||
RZG2L_GPIO_PORT_PACK(4, 0x12, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)),
|
||||
RZG2L_GPIO_PORT_PACK(4, 0x13, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)),
|
||||
RZG2L_GPIO_PORT_PACK(6, 0x14, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH0)),
|
||||
RZG2L_GPIO_PORT_PACK(5, 0x15, RZG2L_MPXED_PIN_FUNCS),
|
||||
RZG2L_GPIO_PORT_PACK(5, 0x16, RZG2L_MPXED_PIN_FUNCS),
|
||||
RZG2L_GPIO_PORT_PACK(5, 0x17, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)),
|
||||
RZG2L_GPIO_PORT_PACK(5, 0x18, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)),
|
||||
RZG2L_GPIO_PORT_PACK(4, 0x19, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)),
|
||||
RZG2L_GPIO_PORT_PACK(5, 0x1a, RZG2L_MPXED_ETH_PIN_FUNCS(PIN_CFG_IO_VMC_ETH1)),
|
||||
RZG2L_GPIO_PORT_PACK(4, 0x1b, RZG2L_MPXED_PIN_FUNCS),
|
||||
RZG2L_GPIO_PORT_PACK(2, 0x1c, RZG2L_MPXED_PIN_FUNCS),
|
||||
RZG2L_GPIO_PORT_PACK(5, 0x1d, RZG2L_MPXED_PIN_FUNCS),
|
||||
RZG2L_GPIO_PORT_PACK(3, 0x1e, RZG2L_MPXED_PIN_FUNCS),
|
||||
RZG2L_GPIO_PORT_PACK(4, 0x1f, RZG2L_MPXED_PIN_FUNCS),
|
||||
RZG2L_GPIO_PORT_PACK(2, 0x20, RZG2L_MPXED_PIN_FUNCS),
|
||||
RZG2L_GPIO_PORT_PACK(4, 0x21, RZG2L_MPXED_PIN_FUNCS),
|
||||
RZG2L_GPIO_PORT_PACK(6, 0x22, RZG2L_MPXED_PIN_FUNCS),
|
||||
};
|
||||
|
||||
static struct {
|
||||
struct rzg2l_dedicated_configs common[35];
|
||||
struct rzg2l_dedicated_configs rzg2l_pins[7];
|
||||
} rzg2l_dedicated_pins = {
|
||||
.common = {
|
||||
{ "NMI", RZG2L_SINGLE_PIN_PACK(0x1, 0,
|
||||
(PIN_CFG_FILONOFF | PIN_CFG_FILNUM | PIN_CFG_FILCLKSEL)) },
|
||||
{ "TMS/SWDIO", RZG2L_SINGLE_PIN_PACK(0x2, 0,
|
||||
(PIN_CFG_IOLH_A | PIN_CFG_SR | PIN_CFG_IEN)) },
|
||||
{ "TDO", RZG2L_SINGLE_PIN_PACK(0x3, 0,
|
||||
(PIN_CFG_IOLH_A | PIN_CFG_SR | PIN_CFG_IEN)) },
|
||||
{ "AUDIO_CLK1", RZG2L_SINGLE_PIN_PACK(0x4, 0, PIN_CFG_IEN) },
|
||||
{ "AUDIO_CLK2", RZG2L_SINGLE_PIN_PACK(0x4, 1, PIN_CFG_IEN) },
|
||||
{ "SD0_CLK", RZG2L_SINGLE_PIN_PACK(0x6, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_CMD", RZG2L_SINGLE_PIN_PACK(0x6, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_RST#", RZG2L_SINGLE_PIN_PACK(0x6, 2,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA0", RZG2L_SINGLE_PIN_PACK(0x7, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA1", RZG2L_SINGLE_PIN_PACK(0x7, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA2", RZG2L_SINGLE_PIN_PACK(0x7, 2,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA3", RZG2L_SINGLE_PIN_PACK(0x7, 3,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA4", RZG2L_SINGLE_PIN_PACK(0x7, 4,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA5", RZG2L_SINGLE_PIN_PACK(0x7, 5,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA6", RZG2L_SINGLE_PIN_PACK(0x7, 6,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD0_DATA7", RZG2L_SINGLE_PIN_PACK(0x7, 7,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD0)) },
|
||||
{ "SD1_CLK", RZG2L_SINGLE_PIN_PACK(0x8, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_SD1)) },
|
||||
{ "SD1_CMD", RZG2L_SINGLE_PIN_PACK(0x8, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) },
|
||||
{ "SD1_DATA0", RZG2L_SINGLE_PIN_PACK(0x9, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) },
|
||||
{ "SD1_DATA1", RZG2L_SINGLE_PIN_PACK(0x9, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) },
|
||||
{ "SD1_DATA2", RZG2L_SINGLE_PIN_PACK(0x9, 2,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) },
|
||||
{ "SD1_DATA3", RZG2L_SINGLE_PIN_PACK(0x9, 3,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IEN | PIN_CFG_IO_VMC_SD1)) },
|
||||
{ "QSPI0_SPCLK", RZG2L_SINGLE_PIN_PACK(0xa, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI0_IO0", RZG2L_SINGLE_PIN_PACK(0xa, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI0_IO1", RZG2L_SINGLE_PIN_PACK(0xa, 2,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI0_IO2", RZG2L_SINGLE_PIN_PACK(0xa, 3,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI0_IO3", RZG2L_SINGLE_PIN_PACK(0xa, 4,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI0_SSL", RZG2L_SINGLE_PIN_PACK(0xa, 5,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI_RESET#", RZG2L_SINGLE_PIN_PACK(0xc, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI_WP#", RZG2L_SINGLE_PIN_PACK(0xc, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "WDTOVF_PERROUT#", RZG2L_SINGLE_PIN_PACK(0xd, 0, (PIN_CFG_IOLH_A | PIN_CFG_SR)) },
|
||||
{ "RIIC0_SDA", RZG2L_SINGLE_PIN_PACK(0xe, 0, PIN_CFG_IEN) },
|
||||
{ "RIIC0_SCL", RZG2L_SINGLE_PIN_PACK(0xe, 1, PIN_CFG_IEN) },
|
||||
{ "RIIC1_SDA", RZG2L_SINGLE_PIN_PACK(0xe, 2, PIN_CFG_IEN) },
|
||||
{ "RIIC1_SCL", RZG2L_SINGLE_PIN_PACK(0xe, 3, PIN_CFG_IEN) },
|
||||
},
|
||||
.rzg2l_pins = {
|
||||
{ "QSPI_INT#", RZG2L_SINGLE_PIN_PACK(0xc, 2, (PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI1_SPCLK", RZG2L_SINGLE_PIN_PACK(0xb, 0,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI1_IO0", RZG2L_SINGLE_PIN_PACK(0xb, 1,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI1_IO1", RZG2L_SINGLE_PIN_PACK(0xb, 2,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI1_IO2", RZG2L_SINGLE_PIN_PACK(0xb, 3,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI1_IO3", RZG2L_SINGLE_PIN_PACK(0xb, 4,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
{ "QSPI1_SSL", RZG2L_SINGLE_PIN_PACK(0xb, 5,
|
||||
(PIN_CFG_IOLH_B | PIN_CFG_SR | PIN_CFG_IO_VMC_QSPI)) },
|
||||
}
|
||||
};
|
||||
|
||||
static int rzg2l_gpio_get_gpioint(unsigned int virq)
|
||||
{
|
||||
unsigned int gpioint;
|
||||
unsigned int i;
|
||||
u32 port, bit;
|
||||
|
||||
port = virq / 8;
|
||||
bit = virq % 8;
|
||||
|
||||
if (port >= ARRAY_SIZE(rzg2l_gpio_configs) ||
|
||||
bit >= RZG2L_GPIO_PORT_GET_PINCNT(rzg2l_gpio_configs[port]))
|
||||
return -EINVAL;
|
||||
|
||||
gpioint = bit;
|
||||
for (i = 0; i < port; i++)
|
||||
gpioint += RZG2L_GPIO_PORT_GET_PINCNT(rzg2l_gpio_configs[i]);
|
||||
|
||||
return gpioint;
|
||||
}
|
||||
|
||||
static void rzg2l_gpio_irq_disable(struct irq_data *d)
|
||||
{
|
||||
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
|
||||
struct rzg2l_pinctrl *pctrl = container_of(gc, struct rzg2l_pinctrl, gpio_chip);
|
||||
unsigned int hwirq = irqd_to_hwirq(d);
|
||||
unsigned long flags;
|
||||
void __iomem *addr;
|
||||
u32 port;
|
||||
u8 bit;
|
||||
|
||||
port = RZG2L_PIN_ID_TO_PORT(hwirq);
|
||||
bit = RZG2L_PIN_ID_TO_PIN(hwirq);
|
||||
|
||||
addr = pctrl->base + ISEL(port);
|
||||
if (bit >= 4) {
|
||||
bit -= 4;
|
||||
addr += 4;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&pctrl->lock, flags);
|
||||
writel(readl(addr) & ~BIT(bit * 8), addr);
|
||||
spin_unlock_irqrestore(&pctrl->lock, flags);
|
||||
|
||||
gpiochip_disable_irq(gc, hwirq);
|
||||
irq_chip_disable_parent(d);
|
||||
}
|
||||
|
||||
static void rzg2l_gpio_irq_enable(struct irq_data *d)
|
||||
{
|
||||
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
|
||||
struct rzg2l_pinctrl *pctrl = container_of(gc, struct rzg2l_pinctrl, gpio_chip);
|
||||
unsigned int hwirq = irqd_to_hwirq(d);
|
||||
unsigned long flags;
|
||||
void __iomem *addr;
|
||||
u32 port;
|
||||
u8 bit;
|
||||
|
||||
gpiochip_enable_irq(gc, hwirq);
|
||||
|
||||
port = RZG2L_PIN_ID_TO_PORT(hwirq);
|
||||
bit = RZG2L_PIN_ID_TO_PIN(hwirq);
|
||||
|
||||
addr = pctrl->base + ISEL(port);
|
||||
if (bit >= 4) {
|
||||
bit -= 4;
|
||||
addr += 4;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&pctrl->lock, flags);
|
||||
writel(readl(addr) | BIT(bit * 8), addr);
|
||||
spin_unlock_irqrestore(&pctrl->lock, flags);
|
||||
|
||||
irq_chip_enable_parent(d);
|
||||
}
|
||||
|
||||
static int rzg2l_gpio_irq_set_type(struct irq_data *d, unsigned int type)
|
||||
{
|
||||
return irq_chip_set_type_parent(d, type);
|
||||
}
|
||||
|
||||
static void rzg2l_gpio_irqc_eoi(struct irq_data *d)
|
||||
{
|
||||
irq_chip_eoi_parent(d);
|
||||
}
|
||||
|
||||
static void rzg2l_gpio_irq_print_chip(struct irq_data *data, struct seq_file *p)
|
||||
{
|
||||
struct gpio_chip *gc = irq_data_get_irq_chip_data(data);
|
||||
|
||||
seq_printf(p, dev_name(gc->parent));
|
||||
}
|
||||
|
||||
static const struct irq_chip rzg2l_gpio_irqchip = {
|
||||
.name = "rzg2l-gpio",
|
||||
.irq_disable = rzg2l_gpio_irq_disable,
|
||||
.irq_enable = rzg2l_gpio_irq_enable,
|
||||
.irq_mask = irq_chip_mask_parent,
|
||||
.irq_unmask = irq_chip_unmask_parent,
|
||||
.irq_set_type = rzg2l_gpio_irq_set_type,
|
||||
.irq_eoi = rzg2l_gpio_irqc_eoi,
|
||||
.irq_print_chip = rzg2l_gpio_irq_print_chip,
|
||||
.flags = IRQCHIP_IMMUTABLE,
|
||||
GPIOCHIP_IRQ_RESOURCE_HELPERS,
|
||||
};
|
||||
|
||||
static int rzg2l_gpio_child_to_parent_hwirq(struct gpio_chip *gc,
|
||||
unsigned int child,
|
||||
unsigned int child_type,
|
||||
unsigned int *parent,
|
||||
unsigned int *parent_type)
|
||||
{
|
||||
struct rzg2l_pinctrl *pctrl = gpiochip_get_data(gc);
|
||||
unsigned long flags;
|
||||
int gpioint, irq;
|
||||
|
||||
gpioint = rzg2l_gpio_get_gpioint(child);
|
||||
if (gpioint < 0)
|
||||
return gpioint;
|
||||
|
||||
spin_lock_irqsave(&pctrl->bitmap_lock, flags);
|
||||
irq = bitmap_find_free_region(pctrl->tint_slot, RZG2L_TINT_MAX_INTERRUPT, get_order(1));
|
||||
spin_unlock_irqrestore(&pctrl->bitmap_lock, flags);
|
||||
if (irq < 0)
|
||||
return -ENOSPC;
|
||||
pctrl->hwirq[irq] = child;
|
||||
irq += RZG2L_TINT_IRQ_START_INDEX;
|
||||
|
||||
/* All these interrupts are level high in the CPU */
|
||||
*parent_type = IRQ_TYPE_LEVEL_HIGH;
|
||||
*parent = RZG2L_PACK_HWIRQ(gpioint, irq);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rzg2l_gpio_populate_parent_fwspec(struct gpio_chip *chip,
|
||||
union gpio_irq_fwspec *gfwspec,
|
||||
unsigned int parent_hwirq,
|
||||
unsigned int parent_type)
|
||||
{
|
||||
struct irq_fwspec *fwspec = &gfwspec->fwspec;
|
||||
|
||||
fwspec->fwnode = chip->irq.parent_domain->fwnode;
|
||||
fwspec->param_count = 2;
|
||||
fwspec->param[0] = parent_hwirq;
|
||||
fwspec->param[1] = parent_type;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rzg2l_gpio_irq_domain_free(struct irq_domain *domain, unsigned int virq,
|
||||
unsigned int nr_irqs)
|
||||
{
|
||||
struct irq_data *d;
|
||||
|
||||
d = irq_domain_get_irq_data(domain, virq);
|
||||
if (d) {
|
||||
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
|
||||
struct rzg2l_pinctrl *pctrl = container_of(gc, struct rzg2l_pinctrl, gpio_chip);
|
||||
irq_hw_number_t hwirq = irqd_to_hwirq(d);
|
||||
unsigned long flags;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < RZG2L_TINT_MAX_INTERRUPT; i++) {
|
||||
if (pctrl->hwirq[i] == hwirq) {
|
||||
spin_lock_irqsave(&pctrl->bitmap_lock, flags);
|
||||
bitmap_release_region(pctrl->tint_slot, i, get_order(1));
|
||||
spin_unlock_irqrestore(&pctrl->bitmap_lock, flags);
|
||||
pctrl->hwirq[i] = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
irq_domain_free_irqs_common(domain, virq, nr_irqs);
|
||||
}
|
||||
|
||||
static void rzg2l_init_irq_valid_mask(struct gpio_chip *gc,
|
||||
unsigned long *valid_mask,
|
||||
unsigned int ngpios)
|
||||
{
|
||||
struct rzg2l_pinctrl *pctrl = gpiochip_get_data(gc);
|
||||
struct gpio_chip *chip = &pctrl->gpio_chip;
|
||||
unsigned int offset;
|
||||
|
||||
/* Forbid unused lines to be mapped as IRQs */
|
||||
for (offset = 0; offset < chip->ngpio; offset++) {
|
||||
u32 port, bit;
|
||||
|
||||
port = offset / 8;
|
||||
bit = offset % 8;
|
||||
|
||||
if (port >= ARRAY_SIZE(rzg2l_gpio_configs) ||
|
||||
bit >= RZG2L_GPIO_PORT_GET_PINCNT(rzg2l_gpio_configs[port]))
|
||||
clear_bit(offset, valid_mask);
|
||||
}
|
||||
}
|
||||
|
||||
static int rzg2l_gpio_register(struct rzg2l_pinctrl *pctrl)
|
||||
{
|
||||
struct device_node *np = pctrl->dev->of_node;
|
||||
struct gpio_chip *chip = &pctrl->gpio_chip;
|
||||
const char *name = dev_name(pctrl->dev);
|
||||
struct irq_domain *parent_domain;
|
||||
struct of_phandle_args of_args;
|
||||
struct device_node *parent_np;
|
||||
struct gpio_irq_chip *girq;
|
||||
int ret;
|
||||
|
||||
parent_np = of_irq_find_parent(np);
|
||||
if (!parent_np)
|
||||
return -ENXIO;
|
||||
|
||||
parent_domain = irq_find_host(parent_np);
|
||||
of_node_put(parent_np);
|
||||
if (!parent_domain)
|
||||
return -EPROBE_DEFER;
|
||||
|
||||
ret = of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3, 0, &of_args);
|
||||
if (ret) {
|
||||
dev_err(pctrl->dev, "Unable to parse gpio-ranges\n");
|
||||
@ -1109,6 +1363,15 @@ static int rzg2l_gpio_register(struct rzg2l_pinctrl *pctrl)
|
||||
chip->base = -1;
|
||||
chip->ngpio = of_args.args[2];
|
||||
|
||||
girq = &chip->irq;
|
||||
gpio_irq_chip_set_chip(girq, &rzg2l_gpio_irqchip);
|
||||
girq->fwnode = of_node_to_fwnode(np);
|
||||
girq->parent_domain = parent_domain;
|
||||
girq->child_to_parent_hwirq = rzg2l_gpio_child_to_parent_hwirq;
|
||||
girq->populate_parent_alloc_arg = rzg2l_gpio_populate_parent_fwspec;
|
||||
girq->child_irq_domain_ops.free = rzg2l_gpio_irq_domain_free;
|
||||
girq->init_valid_mask = rzg2l_init_irq_valid_mask;
|
||||
|
||||
pctrl->gpio_range.id = 0;
|
||||
pctrl->gpio_range.pin_base = 0;
|
||||
pctrl->gpio_range.base = 0;
|
||||
@ -1224,6 +1487,7 @@ static int rzg2l_pinctrl_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
spin_lock_init(&pctrl->lock);
|
||||
spin_lock_init(&pctrl->bitmap_lock);
|
||||
|
||||
platform_set_drvdata(pdev, pctrl);
|
||||
|
||||
@ -1250,15 +1514,28 @@ static int rzg2l_pinctrl_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct rzg2l_pinctrl_data r9a07g043_data = {
|
||||
.port_pins = rzg2l_gpio_names,
|
||||
.port_pin_configs = r9a07g043_gpio_configs,
|
||||
.dedicated_pins = rzg2l_dedicated_pins.common,
|
||||
.n_port_pins = ARRAY_SIZE(r9a07g043_gpio_configs) * RZG2L_PINS_PER_PORT,
|
||||
.n_dedicated_pins = ARRAY_SIZE(rzg2l_dedicated_pins.common),
|
||||
};
|
||||
|
||||
static struct rzg2l_pinctrl_data r9a07g044_data = {
|
||||
.port_pins = rzg2l_gpio_names,
|
||||
.port_pin_configs = rzg2l_gpio_configs,
|
||||
.dedicated_pins = rzg2l_dedicated_pins,
|
||||
.dedicated_pins = rzg2l_dedicated_pins.common,
|
||||
.n_port_pins = ARRAY_SIZE(rzg2l_gpio_names),
|
||||
.n_dedicated_pins = ARRAY_SIZE(rzg2l_dedicated_pins),
|
||||
.n_dedicated_pins = ARRAY_SIZE(rzg2l_dedicated_pins.common) +
|
||||
ARRAY_SIZE(rzg2l_dedicated_pins.rzg2l_pins),
|
||||
};
|
||||
|
||||
static const struct of_device_id rzg2l_pinctrl_of_table[] = {
|
||||
{
|
||||
.compatible = "renesas,r9a07g043-pinctrl",
|
||||
.data = &r9a07g043_data,
|
||||
},
|
||||
{
|
||||
.compatible = "renesas,r9a07g044-pinctrl",
|
||||
.data = &r9a07g044_data,
|
||||
|
@ -865,17 +865,15 @@ static int rzn1_pinctrl_probe(struct platform_device *pdev)
|
||||
ipctl->mdio_func[0] = -1;
|
||||
ipctl->mdio_func[1] = -1;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
ipctl->lev1_protect_phys = (u32)res->start + 0x400;
|
||||
ipctl->lev1 = devm_ioremap_resource(&pdev->dev, res);
|
||||
ipctl->lev1 = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||
if (IS_ERR(ipctl->lev1))
|
||||
return PTR_ERR(ipctl->lev1);
|
||||
ipctl->lev1_protect_phys = (u32)res->start + 0x400;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
ipctl->lev2_protect_phys = (u32)res->start + 0x400;
|
||||
ipctl->lev2 = devm_ioremap_resource(&pdev->dev, res);
|
||||
ipctl->lev2 = devm_platform_get_and_ioremap_resource(pdev, 1, &res);
|
||||
if (IS_ERR(ipctl->lev2))
|
||||
return PTR_ERR(ipctl->lev2);
|
||||
ipctl->lev2_protect_phys = (u32)res->start + 0x400;
|
||||
|
||||
ipctl->clk = devm_clk_get(&pdev->dev, NULL);
|
||||
if (IS_ERR(ipctl->clk))
|
||||
|
@ -9,7 +9,6 @@
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
|
@ -112,7 +112,7 @@ struct pinmux_cfg_reg {
|
||||
#define SET_NR_ENUM_IDS(n)
|
||||
#endif
|
||||
const u16 *enum_ids;
|
||||
const u8 *var_field_width;
|
||||
const s8 *var_field_width;
|
||||
};
|
||||
|
||||
#define GROUP(...) __VA_ARGS__
|
||||
@ -132,9 +132,8 @@ struct pinmux_cfg_reg {
|
||||
.reg = r, .reg_width = r_width, \
|
||||
.field_width = f_width + BUILD_BUG_ON_ZERO(r_width % f_width) + \
|
||||
BUILD_BUG_ON_ZERO(sizeof((const u16 []) { ids }) / sizeof(u16) != \
|
||||
(r_width / f_width) * (1 << f_width)), \
|
||||
.enum_ids = (const u16 [(r_width / f_width) * (1 << f_width)]) \
|
||||
{ ids }
|
||||
(r_width / f_width) << f_width), \
|
||||
.enum_ids = (const u16 [(r_width / f_width) << f_width]) { ids }
|
||||
|
||||
/*
|
||||
* Describe a config register consisting of several fields of different widths
|
||||
@ -143,14 +142,15 @@ struct pinmux_cfg_reg {
|
||||
* - r_width: Width of the register (in bits)
|
||||
* - f_widths: List of widths of the register fields (in bits), from left
|
||||
* to right (i.e. MSB to LSB), wrapped using the GROUP() macro.
|
||||
* - ids: For each register field (from left to right, i.e. MSB to LSB),
|
||||
* 2^f_widths[i] enum IDs must be specified, one for each possible
|
||||
* combination of the register field bit values, all wrapped using
|
||||
* the GROUP() macro.
|
||||
* Reserved fields are indicated by negating the field width.
|
||||
* - ids: For each non-reserved register field (from left to right, i.e. MSB
|
||||
* to LSB), 2^f_widths[i] enum IDs must be specified, one for each
|
||||
* possible combination of the register field bit values, all wrapped
|
||||
* using the GROUP() macro.
|
||||
*/
|
||||
#define PINMUX_CFG_REG_VAR(name, r, r_width, f_widths, ids) \
|
||||
.reg = r, .reg_width = r_width, \
|
||||
.var_field_width = (const u8 []) { f_widths, 0 }, \
|
||||
.var_field_width = (const s8 []) { f_widths, 0 }, \
|
||||
SET_NR_ENUM_IDS(sizeof((const u16 []) { ids }) / sizeof(u16)) \
|
||||
.enum_ids = (const u16 []) { ids }
|
||||
|
||||
@ -162,7 +162,7 @@ struct pinmux_drive_reg_field {
|
||||
|
||||
struct pinmux_drive_reg {
|
||||
u32 reg;
|
||||
const struct pinmux_drive_reg_field fields[8];
|
||||
const struct pinmux_drive_reg_field fields[10];
|
||||
};
|
||||
|
||||
#define PINMUX_DRIVE_REG(name, r) \
|
||||
@ -325,6 +325,7 @@ extern const struct sh_pfc_soc_info r8a77990_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info r8a77995_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info r8a779a0_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info r8a779f0_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info r8a779g0_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info sh7203_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info sh7264_pinmux_info;
|
||||
extern const struct sh_pfc_soc_info sh7269_pinmux_info;
|
||||
@ -492,9 +493,13 @@ extern const struct sh_pfc_soc_info shx3_pinmux_info;
|
||||
PORT_GP_CFG_1(bank, 11, fn, sfx, cfg)
|
||||
#define PORT_GP_12(bank, fn, sfx) PORT_GP_CFG_12(bank, fn, sfx, 0)
|
||||
|
||||
#define PORT_GP_CFG_14(bank, fn, sfx, cfg) \
|
||||
#define PORT_GP_CFG_13(bank, fn, sfx, cfg) \
|
||||
PORT_GP_CFG_12(bank, fn, sfx, cfg), \
|
||||
PORT_GP_CFG_1(bank, 12, fn, sfx, cfg), \
|
||||
PORT_GP_CFG_1(bank, 12, fn, sfx, cfg)
|
||||
#define PORT_GP_13(bank, fn, sfx) PORT_GP_CFG_13(bank, fn, sfx, 0)
|
||||
|
||||
#define PORT_GP_CFG_14(bank, fn, sfx, cfg) \
|
||||
PORT_GP_CFG_13(bank, fn, sfx, cfg), \
|
||||
PORT_GP_CFG_1(bank, 13, fn, sfx, cfg)
|
||||
#define PORT_GP_14(bank, fn, sfx) PORT_GP_CFG_14(bank, fn, sfx, 0)
|
||||
|
||||
@ -739,14 +744,12 @@ extern const struct sh_pfc_soc_info shx3_pinmux_info;
|
||||
* PORTnCR helper macro for SH-Mobile/R-Mobile
|
||||
*/
|
||||
#define PORTCR(nr, reg) { \
|
||||
PINMUX_CFG_REG_VAR("PORT" nr "CR", reg, 8, GROUP(2, 2, 1, 3), \
|
||||
PINMUX_CFG_REG_VAR("PORT" nr "CR", reg, 8, GROUP(-2, 2, -1, 3), \
|
||||
GROUP( \
|
||||
/* PULMD[1:0], handled by .set_bias() */ \
|
||||
0, 0, 0, 0, \
|
||||
/* IE and OE */ \
|
||||
0, PORT##nr##_OUT, PORT##nr##_IN, 0, \
|
||||
/* SEC, not supported */ \
|
||||
0, 0, \
|
||||
/* PTMD[2:0] */ \
|
||||
PORT##nr##_FN0, PORT##nr##_FN1, \
|
||||
PORT##nr##_FN2, PORT##nr##_FN3, \
|
||||
|
@ -27,8 +27,6 @@
|
||||
#include <linux/soc/samsung/exynos-pmu.h>
|
||||
#include <linux/soc/samsung/exynos-regs-pmu.h>
|
||||
|
||||
#include <dt-bindings/pinctrl/samsung.h>
|
||||
|
||||
#include "pinctrl-samsung.h"
|
||||
#include "pinctrl-exynos.h"
|
||||
|
||||
@ -173,7 +171,7 @@ static int exynos_irq_request_resources(struct irq_data *irqd)
|
||||
|
||||
con = readl(bank->pctl_base + reg_con);
|
||||
con &= ~(mask << shift);
|
||||
con |= EXYNOS_PIN_FUNC_EINT << shift;
|
||||
con |= EXYNOS_PIN_CON_FUNC_EINT << shift;
|
||||
writel(con, bank->pctl_base + reg_con);
|
||||
|
||||
raw_spin_unlock_irqrestore(&bank->slock, flags);
|
||||
@ -196,7 +194,7 @@ static void exynos_irq_release_resources(struct irq_data *irqd)
|
||||
|
||||
con = readl(bank->pctl_base + reg_con);
|
||||
con &= ~(mask << shift);
|
||||
con |= EXYNOS_PIN_FUNC_INPUT << shift;
|
||||
con |= PIN_CON_FUNC_INPUT << shift;
|
||||
writel(con, bank->pctl_base + reg_con);
|
||||
|
||||
raw_spin_unlock_irqrestore(&bank->slock, flags);
|
||||
@ -307,7 +305,7 @@ __init int exynos_eint_gpio_init(struct samsung_pinctrl_drv_data *d)
|
||||
}
|
||||
bank->irq_chip->chip.name = bank->name;
|
||||
|
||||
bank->irq_domain = irq_domain_add_linear(bank->of_node,
|
||||
bank->irq_domain = irq_domain_create_linear(bank->fwnode,
|
||||
bank->nr_pins, &exynos_eint_irqd_ops, bank);
|
||||
if (!bank->irq_domain) {
|
||||
dev_err(dev, "gpio irq domain add failed\n");
|
||||
@ -565,7 +563,7 @@ __init int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d)
|
||||
}
|
||||
bank->irq_chip->chip.name = bank->name;
|
||||
|
||||
bank->irq_domain = irq_domain_add_linear(bank->of_node,
|
||||
bank->irq_domain = irq_domain_create_linear(bank->fwnode,
|
||||
bank->nr_pins, &exynos_eint_irqd_ops, bank);
|
||||
if (!bank->irq_domain) {
|
||||
dev_err(dev, "wkup irq domain add failed\n");
|
||||
@ -573,7 +571,7 @@ __init int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d)
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
if (!of_find_property(bank->of_node, "interrupts", NULL)) {
|
||||
if (!fwnode_property_present(bank->fwnode, "interrupts")) {
|
||||
bank->eint_type = EINT_TYPE_WKUP_MUX;
|
||||
++muxed_banks;
|
||||
continue;
|
||||
@ -588,7 +586,7 @@ __init int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d)
|
||||
}
|
||||
|
||||
for (idx = 0; idx < bank->nr_pins; ++idx) {
|
||||
irq = irq_of_parse_and_map(bank->of_node, idx);
|
||||
irq = irq_of_parse_and_map(to_of_node(bank->fwnode), idx);
|
||||
if (!irq) {
|
||||
dev_err(dev, "irq number for eint-%s-%d not found\n",
|
||||
bank->name, idx);
|
||||
|
@ -16,6 +16,9 @@
|
||||
#ifndef __PINCTRL_SAMSUNG_EXYNOS_H
|
||||
#define __PINCTRL_SAMSUNG_EXYNOS_H
|
||||
|
||||
/* Values for the pin CON register */
|
||||
#define EXYNOS_PIN_CON_FUNC_EINT 0xf
|
||||
|
||||
/* External GPIO and wakeup interrupt related definitions */
|
||||
#define EXYNOS_GPIO_ECON_OFFSET 0x700
|
||||
#define EXYNOS_GPIO_EFLTCON_OFFSET 0x800
|
||||
|
@ -525,7 +525,7 @@ static int s3c24xx_eint_init(struct samsung_pinctrl_drv_data *d)
|
||||
ops = (bank->eint_offset == 0) ? &s3c24xx_gpf_irq_ops
|
||||
: &s3c24xx_gpg_irq_ops;
|
||||
|
||||
bank->irq_domain = irq_domain_add_linear(bank->of_node,
|
||||
bank->irq_domain = irq_domain_create_linear(bank->fwnode,
|
||||
bank->nr_pins, ops, ddata);
|
||||
if (!bank->irq_domain) {
|
||||
dev_err(dev, "wkup irq domain add failed\n");
|
||||
|
@ -471,7 +471,7 @@ static int s3c64xx_eint_gpio_init(struct samsung_pinctrl_drv_data *d)
|
||||
mask = bank->eint_mask;
|
||||
nr_eints = fls(mask);
|
||||
|
||||
bank->irq_domain = irq_domain_add_linear(bank->of_node,
|
||||
bank->irq_domain = irq_domain_create_linear(bank->fwnode,
|
||||
nr_eints, &s3c64xx_gpio_irqd_ops, bank);
|
||||
if (!bank->irq_domain) {
|
||||
dev_err(dev, "gpio irq domain add failed\n");
|
||||
@ -743,7 +743,7 @@ static int s3c64xx_eint_eint0_init(struct samsung_pinctrl_drv_data *d)
|
||||
return -ENOMEM;
|
||||
ddata->bank = bank;
|
||||
|
||||
bank->irq_domain = irq_domain_add_linear(bank->of_node,
|
||||
bank->irq_domain = irq_domain_create_linear(bank->fwnode,
|
||||
nr_eints, &s3c64xx_eint0_irqd_ops, ddata);
|
||||
if (!bank->irq_domain) {
|
||||
dev_err(dev, "wkup irq domain add failed\n");
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
@ -25,8 +26,6 @@
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
#include <dt-bindings/pinctrl/samsung.h>
|
||||
|
||||
#include "../core.h"
|
||||
#include "pinctrl-samsung.h"
|
||||
|
||||
@ -613,7 +612,7 @@ static int samsung_gpio_set_direction(struct gpio_chip *gc,
|
||||
data = readl(reg);
|
||||
data &= ~(mask << shift);
|
||||
if (!input)
|
||||
data |= EXYNOS_PIN_FUNC_OUTPUT << shift;
|
||||
data |= PIN_CON_FUNC_OUTPUT << shift;
|
||||
writel(data, reg);
|
||||
|
||||
return 0;
|
||||
@ -966,7 +965,7 @@ static int samsung_gpiolib_register(struct platform_device *pdev,
|
||||
gc->base = bank->grange.base;
|
||||
gc->ngpio = bank->nr_pins;
|
||||
gc->parent = &pdev->dev;
|
||||
gc->of_node = bank->of_node;
|
||||
gc->fwnode = bank->fwnode;
|
||||
gc->label = bank->name;
|
||||
|
||||
ret = devm_gpiochip_add_data(&pdev->dev, gc, bank);
|
||||
@ -1002,27 +1001,25 @@ samsung_pinctrl_get_soc_data_for_of_alias(struct platform_device *pdev)
|
||||
return &(of_data->ctrl[id]);
|
||||
}
|
||||
|
||||
static void samsung_banks_of_node_put(struct samsung_pinctrl_drv_data *d)
|
||||
static void samsung_banks_node_put(struct samsung_pinctrl_drv_data *d)
|
||||
{
|
||||
struct samsung_pin_bank *bank;
|
||||
unsigned int i;
|
||||
|
||||
bank = d->pin_banks;
|
||||
for (i = 0; i < d->nr_banks; ++i, ++bank)
|
||||
of_node_put(bank->of_node);
|
||||
fwnode_handle_put(bank->fwnode);
|
||||
}
|
||||
|
||||
/*
|
||||
* Iterate over all driver pin banks to find one matching the name of node,
|
||||
* skipping optional "-gpio" node suffix. When found, assign node to the bank.
|
||||
*/
|
||||
static void samsung_banks_of_node_get(struct device *dev,
|
||||
struct samsung_pinctrl_drv_data *d,
|
||||
struct device_node *node)
|
||||
static void samsung_banks_node_get(struct device *dev, struct samsung_pinctrl_drv_data *d)
|
||||
{
|
||||
const char *suffix = "-gpio-bank";
|
||||
struct samsung_pin_bank *bank;
|
||||
struct device_node *child;
|
||||
struct fwnode_handle *child;
|
||||
/* Pin bank names are up to 4 characters */
|
||||
char node_name[20];
|
||||
unsigned int i;
|
||||
@ -1038,17 +1035,17 @@ static void samsung_banks_of_node_get(struct device *dev,
|
||||
continue;
|
||||
}
|
||||
|
||||
for_each_child_of_node(node, child) {
|
||||
if (!of_find_property(child, "gpio-controller", NULL))
|
||||
continue;
|
||||
if (of_node_name_eq(child, node_name))
|
||||
for_each_gpiochip_node(dev, child) {
|
||||
struct device_node *np = to_of_node(child);
|
||||
|
||||
if (of_node_name_eq(np, node_name))
|
||||
break;
|
||||
else if (of_node_name_eq(child, bank->name))
|
||||
if (of_node_name_eq(np, bank->name))
|
||||
break;
|
||||
}
|
||||
|
||||
if (child)
|
||||
bank->of_node = child;
|
||||
bank->fwnode = child;
|
||||
else
|
||||
dev_warn(dev, "Missing node for bank %s - invalid DTB\n",
|
||||
bank->name);
|
||||
@ -1061,7 +1058,6 @@ static const struct samsung_pin_ctrl *
|
||||
samsung_pinctrl_get_soc_data(struct samsung_pinctrl_drv_data *d,
|
||||
struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *node = pdev->dev.of_node;
|
||||
const struct samsung_pin_bank_data *bdata;
|
||||
const struct samsung_pin_ctrl *ctrl;
|
||||
struct samsung_pin_bank *bank;
|
||||
@ -1125,7 +1121,7 @@ samsung_pinctrl_get_soc_data(struct samsung_pinctrl_drv_data *d,
|
||||
*/
|
||||
d->virt_base = virt_base[0];
|
||||
|
||||
samsung_banks_of_node_get(&pdev->dev, d, node);
|
||||
samsung_banks_node_get(&pdev->dev, d);
|
||||
|
||||
d->pin_base = pin_base;
|
||||
pin_base += d->nr_pins;
|
||||
@ -1186,7 +1182,7 @@ static int samsung_pinctrl_probe(struct platform_device *pdev)
|
||||
err_unregister:
|
||||
samsung_pinctrl_unregister(pdev, drvdata);
|
||||
err_put_banks:
|
||||
samsung_banks_of_node_put(drvdata);
|
||||
samsung_banks_node_put(drvdata);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -53,6 +53,14 @@ enum pincfg_type {
|
||||
#define PINCFG_UNPACK_TYPE(cfg) ((cfg) & PINCFG_TYPE_MASK)
|
||||
#define PINCFG_UNPACK_VALUE(cfg) (((cfg) & PINCFG_VALUE_MASK) >> \
|
||||
PINCFG_VALUE_SHIFT)
|
||||
/*
|
||||
* Values for the pin CON register, choosing pin function.
|
||||
* The basic set (input and output) are same between: S3C24xx, S3C64xx, S5PV210,
|
||||
* Exynos ARMv7, Exynos ARMv8, Tesla FSD.
|
||||
*/
|
||||
#define PIN_CON_FUNC_INPUT 0x0
|
||||
#define PIN_CON_FUNC_OUTPUT 0x1
|
||||
|
||||
/**
|
||||
* enum eint_type - possible external interrupt types.
|
||||
* @EINT_TYPE_NONE: bank does not support external interrupts
|
||||
@ -165,7 +173,7 @@ struct samsung_pin_bank {
|
||||
|
||||
u32 pin_base;
|
||||
void *soc_priv;
|
||||
struct device_node *of_node;
|
||||
struct fwnode_handle *fwnode;
|
||||
struct samsung_pinctrl_drv_data *drvdata;
|
||||
struct irq_domain *irq_domain;
|
||||
struct gpio_chip gpio_chip;
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/pinctrl/pinmux.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/reset.h>
|
||||
#include <linux/slab.h>
|
||||
@ -43,6 +44,7 @@
|
||||
#define STM32_GPIO_LCKR 0x1c
|
||||
#define STM32_GPIO_AFRL 0x20
|
||||
#define STM32_GPIO_AFRH 0x24
|
||||
#define STM32_GPIO_SECCFGR 0x30
|
||||
|
||||
/* custom bitfield to backup pin status */
|
||||
#define STM32_GPIO_BKP_MODE_SHIFT 0
|
||||
@ -94,6 +96,7 @@ struct stm32_gpio_bank {
|
||||
u32 bank_ioport_nr;
|
||||
u32 pin_backup[STM32_GPIO_PINS_PER_BANK];
|
||||
u8 irq_type[STM32_GPIO_PINS_PER_BANK];
|
||||
bool secure_control;
|
||||
};
|
||||
|
||||
struct stm32_pinctrl {
|
||||
@ -197,11 +200,7 @@ static inline void __stm32_gpio_set(struct stm32_gpio_bank *bank,
|
||||
if (!value)
|
||||
offset += STM32_GPIO_PINS_PER_BANK;
|
||||
|
||||
clk_enable(bank->clk);
|
||||
|
||||
writel_relaxed(BIT(offset), bank->base + STM32_GPIO_BSRR);
|
||||
|
||||
clk_disable(bank->clk);
|
||||
}
|
||||
|
||||
static int stm32_gpio_request(struct gpio_chip *chip, unsigned offset)
|
||||
@ -225,27 +224,13 @@ static void stm32_gpio_free(struct gpio_chip *chip, unsigned offset)
|
||||
pinctrl_gpio_free(chip->base + offset);
|
||||
}
|
||||
|
||||
static int stm32_gpio_get_noclk(struct gpio_chip *chip, unsigned int offset)
|
||||
static int stm32_gpio_get(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
|
||||
|
||||
return !!(readl_relaxed(bank->base + STM32_GPIO_IDR) & BIT(offset));
|
||||
}
|
||||
|
||||
static int stm32_gpio_get(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
|
||||
int ret;
|
||||
|
||||
clk_enable(bank->clk);
|
||||
|
||||
ret = stm32_gpio_get_noclk(chip, offset);
|
||||
|
||||
clk_disable(bank->clk);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void stm32_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
|
||||
{
|
||||
struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
|
||||
@ -301,6 +286,33 @@ static int stm32_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int stm32_gpio_init_valid_mask(struct gpio_chip *chip,
|
||||
unsigned long *valid_mask,
|
||||
unsigned int ngpios)
|
||||
{
|
||||
struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
|
||||
struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
|
||||
unsigned int i;
|
||||
u32 sec;
|
||||
|
||||
/* All gpio are valid per default */
|
||||
bitmap_fill(valid_mask, ngpios);
|
||||
|
||||
if (bank->secure_control) {
|
||||
/* Tag secured pins as invalid */
|
||||
sec = readl_relaxed(bank->base + STM32_GPIO_SECCFGR);
|
||||
|
||||
for (i = 0; i < ngpios; i++) {
|
||||
if (sec & BIT(i)) {
|
||||
clear_bit(i, valid_mask);
|
||||
dev_dbg(pctl->dev, "No access to gpio %d - %d\n", bank->bank_nr, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct gpio_chip stm32_gpio_template = {
|
||||
.request = stm32_gpio_request,
|
||||
.free = stm32_gpio_free,
|
||||
@ -311,6 +323,7 @@ static const struct gpio_chip stm32_gpio_template = {
|
||||
.to_irq = stm32_gpio_to_irq,
|
||||
.get_direction = stm32_gpio_get_direction,
|
||||
.set_config = gpiochip_generic_config,
|
||||
.init_valid_mask = stm32_gpio_init_valid_mask,
|
||||
};
|
||||
|
||||
static void stm32_gpio_irq_trigger(struct irq_data *d)
|
||||
@ -323,7 +336,7 @@ static void stm32_gpio_irq_trigger(struct irq_data *d)
|
||||
return;
|
||||
|
||||
/* If level interrupt type then retrig */
|
||||
level = stm32_gpio_get_noclk(&bank->gpio_chip, d->hwirq);
|
||||
level = stm32_gpio_get(&bank->gpio_chip, d->hwirq);
|
||||
if ((level == 0 && bank->irq_type[d->hwirq] == IRQ_TYPE_LEVEL_LOW) ||
|
||||
(level == 1 && bank->irq_type[d->hwirq] == IRQ_TYPE_LEVEL_HIGH))
|
||||
irq_chip_retrigger_hierarchy(d);
|
||||
@ -365,7 +378,6 @@ static int stm32_gpio_irq_request_resources(struct irq_data *irq_data)
|
||||
{
|
||||
struct stm32_gpio_bank *bank = irq_data->domain->host_data;
|
||||
struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
ret = stm32_gpio_direction_input(&bank->gpio_chip, irq_data->hwirq);
|
||||
@ -379,10 +391,6 @@ static int stm32_gpio_irq_request_resources(struct irq_data *irq_data)
|
||||
return ret;
|
||||
}
|
||||
|
||||
flags = irqd_get_trigger_type(irq_data);
|
||||
if (flags & IRQ_TYPE_LEVEL_MASK)
|
||||
clk_enable(bank->clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -390,9 +398,6 @@ static void stm32_gpio_irq_release_resources(struct irq_data *irq_data)
|
||||
{
|
||||
struct stm32_gpio_bank *bank = irq_data->domain->host_data;
|
||||
|
||||
if (bank->irq_type[irq_data->hwirq] & IRQ_TYPE_LEVEL_MASK)
|
||||
clk_disable(bank->clk);
|
||||
|
||||
gpiochip_unlock_as_irq(&bank->gpio_chip, irq_data->hwirq);
|
||||
}
|
||||
|
||||
@ -533,7 +538,7 @@ stm32_pctrl_find_group_by_pin(struct stm32_pinctrl *pctl, u32 pin)
|
||||
static bool stm32_pctrl_is_function_valid(struct stm32_pinctrl *pctl,
|
||||
u32 pin_num, u32 fnum)
|
||||
{
|
||||
int i;
|
||||
int i, k;
|
||||
|
||||
for (i = 0; i < pctl->npins; i++) {
|
||||
const struct stm32_desc_pin *pin = pctl->pins + i;
|
||||
@ -542,7 +547,7 @@ static bool stm32_pctrl_is_function_valid(struct stm32_pinctrl *pctl,
|
||||
if (pin->pin.number != pin_num)
|
||||
continue;
|
||||
|
||||
while (func && func->name) {
|
||||
for (k = 0; k < STM32_CONFIG_NUM; k++) {
|
||||
if (func->num == fnum)
|
||||
return true;
|
||||
func++;
|
||||
@ -769,7 +774,6 @@ static int stm32_pmx_set_mode(struct stm32_gpio_bank *bank,
|
||||
unsigned long flags;
|
||||
int err = 0;
|
||||
|
||||
clk_enable(bank->clk);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
|
||||
if (pctl->hwlock) {
|
||||
@ -798,7 +802,6 @@ static int stm32_pmx_set_mode(struct stm32_gpio_bank *bank,
|
||||
|
||||
unlock:
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
clk_disable(bank->clk);
|
||||
|
||||
return err;
|
||||
}
|
||||
@ -811,7 +814,6 @@ void stm32_pmx_get_mode(struct stm32_gpio_bank *bank, int pin, u32 *mode,
|
||||
int alt_offset = STM32_GPIO_AFRL + (pin / 8) * 4;
|
||||
unsigned long flags;
|
||||
|
||||
clk_enable(bank->clk);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
|
||||
val = readl_relaxed(bank->base + alt_offset);
|
||||
@ -823,7 +825,6 @@ void stm32_pmx_get_mode(struct stm32_gpio_bank *bank, int pin, u32 *mode,
|
||||
*mode = val >> (pin * 2);
|
||||
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
clk_disable(bank->clk);
|
||||
}
|
||||
|
||||
static int stm32_pmx_set_mux(struct pinctrl_dev *pctldev,
|
||||
@ -867,12 +868,32 @@ static int stm32_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
|
||||
return stm32_pmx_set_mode(bank, pin, !input, 0);
|
||||
}
|
||||
|
||||
static int stm32_pmx_request(struct pinctrl_dev *pctldev, unsigned int gpio)
|
||||
{
|
||||
struct stm32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
|
||||
struct pinctrl_gpio_range *range;
|
||||
|
||||
range = pinctrl_find_gpio_range_from_pin_nolock(pctldev, gpio);
|
||||
if (!range) {
|
||||
dev_err(pctl->dev, "No gpio range defined.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!gpiochip_line_is_valid(range->gc, stm32_gpio_pin(gpio))) {
|
||||
dev_warn(pctl->dev, "Can't access gpio %d\n", gpio);
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct pinmux_ops stm32_pmx_ops = {
|
||||
.get_functions_count = stm32_pmx_get_funcs_cnt,
|
||||
.get_function_name = stm32_pmx_get_func_name,
|
||||
.get_function_groups = stm32_pmx_get_func_groups,
|
||||
.set_mux = stm32_pmx_set_mux,
|
||||
.gpio_set_direction = stm32_pmx_gpio_set_direction,
|
||||
.request = stm32_pmx_request,
|
||||
.strict = true,
|
||||
};
|
||||
|
||||
@ -886,7 +907,6 @@ static int stm32_pconf_set_driving(struct stm32_gpio_bank *bank,
|
||||
u32 val;
|
||||
int err = 0;
|
||||
|
||||
clk_enable(bank->clk);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
|
||||
if (pctl->hwlock) {
|
||||
@ -910,7 +930,6 @@ static int stm32_pconf_set_driving(struct stm32_gpio_bank *bank,
|
||||
|
||||
unlock:
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
clk_disable(bank->clk);
|
||||
|
||||
return err;
|
||||
}
|
||||
@ -921,14 +940,12 @@ static u32 stm32_pconf_get_driving(struct stm32_gpio_bank *bank,
|
||||
unsigned long flags;
|
||||
u32 val;
|
||||
|
||||
clk_enable(bank->clk);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
|
||||
val = readl_relaxed(bank->base + STM32_GPIO_TYPER);
|
||||
val &= BIT(offset);
|
||||
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
clk_disable(bank->clk);
|
||||
|
||||
return (val >> offset);
|
||||
}
|
||||
@ -941,7 +958,6 @@ static int stm32_pconf_set_speed(struct stm32_gpio_bank *bank,
|
||||
u32 val;
|
||||
int err = 0;
|
||||
|
||||
clk_enable(bank->clk);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
|
||||
if (pctl->hwlock) {
|
||||
@ -965,7 +981,6 @@ static int stm32_pconf_set_speed(struct stm32_gpio_bank *bank,
|
||||
|
||||
unlock:
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
clk_disable(bank->clk);
|
||||
|
||||
return err;
|
||||
}
|
||||
@ -976,14 +991,12 @@ static u32 stm32_pconf_get_speed(struct stm32_gpio_bank *bank,
|
||||
unsigned long flags;
|
||||
u32 val;
|
||||
|
||||
clk_enable(bank->clk);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
|
||||
val = readl_relaxed(bank->base + STM32_GPIO_SPEEDR);
|
||||
val &= GENMASK(offset * 2 + 1, offset * 2);
|
||||
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
clk_disable(bank->clk);
|
||||
|
||||
return (val >> (offset * 2));
|
||||
}
|
||||
@ -996,7 +1009,6 @@ static int stm32_pconf_set_bias(struct stm32_gpio_bank *bank,
|
||||
u32 val;
|
||||
int err = 0;
|
||||
|
||||
clk_enable(bank->clk);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
|
||||
if (pctl->hwlock) {
|
||||
@ -1020,7 +1032,6 @@ static int stm32_pconf_set_bias(struct stm32_gpio_bank *bank,
|
||||
|
||||
unlock:
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
clk_disable(bank->clk);
|
||||
|
||||
return err;
|
||||
}
|
||||
@ -1031,14 +1042,12 @@ static u32 stm32_pconf_get_bias(struct stm32_gpio_bank *bank,
|
||||
unsigned long flags;
|
||||
u32 val;
|
||||
|
||||
clk_enable(bank->clk);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
|
||||
val = readl_relaxed(bank->base + STM32_GPIO_PUPDR);
|
||||
val &= GENMASK(offset * 2 + 1, offset * 2);
|
||||
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
clk_disable(bank->clk);
|
||||
|
||||
return (val >> (offset * 2));
|
||||
}
|
||||
@ -1049,7 +1058,6 @@ static bool stm32_pconf_get(struct stm32_gpio_bank *bank,
|
||||
unsigned long flags;
|
||||
u32 val;
|
||||
|
||||
clk_enable(bank->clk);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
|
||||
if (dir)
|
||||
@ -1060,7 +1068,6 @@ static bool stm32_pconf_get(struct stm32_gpio_bank *bank,
|
||||
BIT(offset));
|
||||
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
clk_disable(bank->clk);
|
||||
|
||||
return val;
|
||||
}
|
||||
@ -1083,6 +1090,11 @@ static int stm32_pconf_parse_conf(struct pinctrl_dev *pctldev,
|
||||
bank = gpiochip_get_data(range->gc);
|
||||
offset = stm32_gpio_pin(pin);
|
||||
|
||||
if (!gpiochip_line_is_valid(range->gc, offset)) {
|
||||
dev_warn(pctl->dev, "Can't access gpio %d\n", pin);
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
switch (param) {
|
||||
case PIN_CONFIG_DRIVE_PUSH_PULL:
|
||||
ret = stm32_pconf_set_driving(bank, offset, 0);
|
||||
@ -1162,10 +1174,27 @@ static int stm32_pconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct stm32_desc_pin *
|
||||
stm32_pconf_get_pin_desc_by_pin_number(struct stm32_pinctrl *pctl,
|
||||
unsigned int pin_number)
|
||||
{
|
||||
struct stm32_desc_pin *pins = pctl->pins;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < pctl->npins; i++) {
|
||||
if (pins->pin.number == pin_number)
|
||||
return pins;
|
||||
pins++;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void stm32_pconf_dbg_show(struct pinctrl_dev *pctldev,
|
||||
struct seq_file *s,
|
||||
unsigned int pin)
|
||||
{
|
||||
struct stm32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
|
||||
const struct stm32_desc_pin *pin_desc;
|
||||
struct pinctrl_gpio_range *range;
|
||||
struct stm32_gpio_bank *bank;
|
||||
int offset;
|
||||
@ -1185,6 +1214,11 @@ static void stm32_pconf_dbg_show(struct pinctrl_dev *pctldev,
|
||||
bank = gpiochip_get_data(range->gc);
|
||||
offset = stm32_gpio_pin(pin);
|
||||
|
||||
if (!gpiochip_line_is_valid(range->gc, offset)) {
|
||||
seq_puts(s, "NO ACCESS");
|
||||
return;
|
||||
}
|
||||
|
||||
stm32_pmx_get_mode(bank, offset, &mode, &alt);
|
||||
bias = stm32_pconf_get_bias(bank, offset);
|
||||
|
||||
@ -1215,7 +1249,12 @@ static void stm32_pconf_dbg_show(struct pinctrl_dev *pctldev,
|
||||
case 2:
|
||||
drive = stm32_pconf_get_driving(bank, offset);
|
||||
speed = stm32_pconf_get_speed(bank, offset);
|
||||
seq_printf(s, "%d - %s - %s - %s %s", alt,
|
||||
pin_desc = stm32_pconf_get_pin_desc_by_pin_number(pctl, pin);
|
||||
if (!pin_desc)
|
||||
return;
|
||||
|
||||
seq_printf(s, "%d (%s) - %s - %s - %s %s", alt,
|
||||
pin_desc->functions[alt + 1].name,
|
||||
drive ? "open drain" : "push pull",
|
||||
biasing[bias],
|
||||
speeds[speed], "speed");
|
||||
@ -1234,13 +1273,12 @@ static const struct pinconf_ops stm32_pconf_ops = {
|
||||
.pin_config_dbg_show = stm32_pconf_dbg_show,
|
||||
};
|
||||
|
||||
static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl,
|
||||
struct device_node *np)
|
||||
static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode_handle *fwnode)
|
||||
{
|
||||
struct stm32_gpio_bank *bank = &pctl->banks[pctl->nbanks];
|
||||
int bank_ioport_nr;
|
||||
struct pinctrl_gpio_range *range = &bank->range;
|
||||
struct of_phandle_args args;
|
||||
struct fwnode_reference_args args;
|
||||
struct device *dev = pctl->dev;
|
||||
struct resource res;
|
||||
int npins = STM32_GPIO_PINS_PER_BANK;
|
||||
@ -1249,30 +1287,30 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl,
|
||||
if (!IS_ERR(bank->rstc))
|
||||
reset_control_deassert(bank->rstc);
|
||||
|
||||
if (of_address_to_resource(np, 0, &res))
|
||||
if (of_address_to_resource(to_of_node(fwnode), 0, &res))
|
||||
return -ENODEV;
|
||||
|
||||
bank->base = devm_ioremap_resource(dev, &res);
|
||||
if (IS_ERR(bank->base))
|
||||
return PTR_ERR(bank->base);
|
||||
|
||||
err = clk_prepare(bank->clk);
|
||||
err = clk_prepare_enable(bank->clk);
|
||||
if (err) {
|
||||
dev_err(dev, "failed to prepare clk (%d)\n", err);
|
||||
dev_err(dev, "failed to prepare_enable clk (%d)\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
bank->gpio_chip = stm32_gpio_template;
|
||||
|
||||
of_property_read_string(np, "st,bank-name", &bank->gpio_chip.label);
|
||||
fwnode_property_read_string(fwnode, "st,bank-name", &bank->gpio_chip.label);
|
||||
|
||||
if (!of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3, i, &args)) {
|
||||
if (!fwnode_property_get_reference_args(fwnode, "gpio-ranges", NULL, 3, i, &args)) {
|
||||
bank_nr = args.args[1] / STM32_GPIO_PINS_PER_BANK;
|
||||
bank->gpio_chip.base = args.args[1];
|
||||
|
||||
/* get the last defined gpio line (offset + nb of pins) */
|
||||
npins = args.args[0] + args.args[2];
|
||||
while (!of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3, ++i, &args))
|
||||
while (!fwnode_property_get_reference_args(fwnode, "gpio-ranges", NULL, 3, ++i, &args))
|
||||
npins = max(npins, (int)(args.args[0] + args.args[2]));
|
||||
} else {
|
||||
bank_nr = pctl->nbanks;
|
||||
@ -1287,40 +1325,50 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl,
|
||||
&pctl->banks[bank_nr].range);
|
||||
}
|
||||
|
||||
if (of_property_read_u32(np, "st,bank-ioport", &bank_ioport_nr))
|
||||
if (fwnode_property_read_u32(fwnode, "st,bank-ioport", &bank_ioport_nr))
|
||||
bank_ioport_nr = bank_nr;
|
||||
|
||||
bank->gpio_chip.base = bank_nr * STM32_GPIO_PINS_PER_BANK;
|
||||
|
||||
bank->gpio_chip.ngpio = npins;
|
||||
bank->gpio_chip.of_node = np;
|
||||
bank->gpio_chip.fwnode = fwnode;
|
||||
bank->gpio_chip.parent = dev;
|
||||
bank->bank_nr = bank_nr;
|
||||
bank->bank_ioport_nr = bank_ioport_nr;
|
||||
bank->secure_control = pctl->match_data->secure_control;
|
||||
spin_lock_init(&bank->lock);
|
||||
|
||||
/* create irq hierarchical domain */
|
||||
bank->fwnode = of_node_to_fwnode(np);
|
||||
if (pctl->domain) {
|
||||
/* create irq hierarchical domain */
|
||||
bank->fwnode = fwnode;
|
||||
|
||||
bank->domain = irq_domain_create_hierarchy(pctl->domain, 0,
|
||||
STM32_GPIO_IRQ_LINE, bank->fwnode,
|
||||
&stm32_gpio_domain_ops, bank);
|
||||
bank->domain = irq_domain_create_hierarchy(pctl->domain, 0, STM32_GPIO_IRQ_LINE,
|
||||
bank->fwnode, &stm32_gpio_domain_ops,
|
||||
bank);
|
||||
|
||||
if (!bank->domain)
|
||||
return -ENODEV;
|
||||
if (!bank->domain) {
|
||||
err = -ENODEV;
|
||||
goto err_clk;
|
||||
}
|
||||
}
|
||||
|
||||
err = gpiochip_add_data(&bank->gpio_chip, bank);
|
||||
if (err) {
|
||||
dev_err(dev, "Failed to add gpiochip(%d)!\n", bank_nr);
|
||||
return err;
|
||||
goto err_clk;
|
||||
}
|
||||
|
||||
dev_info(dev, "%s bank added\n", bank->gpio_chip.label);
|
||||
return 0;
|
||||
|
||||
err_clk:
|
||||
clk_disable_unprepare(bank->clk);
|
||||
return err;
|
||||
}
|
||||
|
||||
static struct irq_domain *stm32_pctrl_get_irq_domain(struct device_node *np)
|
||||
static struct irq_domain *stm32_pctrl_get_irq_domain(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
struct device_node *parent;
|
||||
struct irq_domain *domain;
|
||||
|
||||
@ -1424,7 +1472,8 @@ static int stm32_pctrl_create_pins_tab(struct stm32_pinctrl *pctl,
|
||||
if (pctl->pkg && !(pctl->pkg & p->pkg))
|
||||
continue;
|
||||
pins->pin = p->pin;
|
||||
pins->functions = p->functions;
|
||||
memcpy((struct stm32_desc_pin *)pins->functions, p->functions,
|
||||
STM32_CONFIG_NUM * sizeof(struct stm32_desc_function));
|
||||
pins++;
|
||||
nb_pins_available++;
|
||||
}
|
||||
@ -1436,22 +1485,19 @@ static int stm32_pctrl_create_pins_tab(struct stm32_pinctrl *pctl,
|
||||
|
||||
int stm32_pctl_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
struct device_node *child;
|
||||
const struct of_device_id *match;
|
||||
const struct stm32_pinctrl_match_data *match_data;
|
||||
struct fwnode_handle *child;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct stm32_pinctrl *pctl;
|
||||
struct pinctrl_pin_desc *pins;
|
||||
int i, ret, hwlock_id, banks = 0;
|
||||
int i, ret, hwlock_id;
|
||||
unsigned int banks;
|
||||
|
||||
if (!np)
|
||||
match_data = device_get_match_data(dev);
|
||||
if (!match_data)
|
||||
return -EINVAL;
|
||||
|
||||
match = of_match_device(dev->driver->of_match_table, dev);
|
||||
if (!match || !match->data)
|
||||
return -EINVAL;
|
||||
|
||||
if (!of_find_property(np, "pins-are-numbered", NULL)) {
|
||||
if (!device_property_present(dev, "pins-are-numbered")) {
|
||||
dev_err(dev, "only support pins-are-numbered format\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
@ -1463,9 +1509,11 @@ int stm32_pctl_probe(struct platform_device *pdev)
|
||||
platform_set_drvdata(pdev, pctl);
|
||||
|
||||
/* check for IRQ controller (may require deferred probe) */
|
||||
pctl->domain = stm32_pctrl_get_irq_domain(np);
|
||||
pctl->domain = stm32_pctrl_get_irq_domain(pdev);
|
||||
if (IS_ERR(pctl->domain))
|
||||
return PTR_ERR(pctl->domain);
|
||||
if (!pctl->domain)
|
||||
dev_warn(dev, "pinctrl without interrupt support\n");
|
||||
|
||||
/* hwspinlock is optional */
|
||||
hwlock_id = of_hwspin_lock_get_id(pdev->dev.of_node, 0);
|
||||
@ -1479,10 +1527,10 @@ int stm32_pctl_probe(struct platform_device *pdev)
|
||||
spin_lock_init(&pctl->irqmux_lock);
|
||||
|
||||
pctl->dev = dev;
|
||||
pctl->match_data = match->data;
|
||||
pctl->match_data = match_data;
|
||||
|
||||
/* get optional package information */
|
||||
if (!of_property_read_u32(np, "st,package", &pctl->pkg))
|
||||
if (!device_property_read_u32(dev, "st,package", &pctl->pkg))
|
||||
dev_dbg(pctl->dev, "package detected: %x\n", pctl->pkg);
|
||||
|
||||
pctl->pins = devm_kcalloc(pctl->dev, pctl->match_data->npins,
|
||||
@ -1532,10 +1580,7 @@ int stm32_pctl_probe(struct platform_device *pdev)
|
||||
return PTR_ERR(pctl->pctl_dev);
|
||||
}
|
||||
|
||||
for_each_available_child_of_node(np, child)
|
||||
if (of_property_read_bool(child, "gpio-controller"))
|
||||
banks++;
|
||||
|
||||
banks = gpiochip_node_count(dev);
|
||||
if (!banks) {
|
||||
dev_err(dev, "at least one GPIO bank is required\n");
|
||||
return -EINVAL;
|
||||
@ -1546,40 +1591,38 @@ int stm32_pctl_probe(struct platform_device *pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
i = 0;
|
||||
for_each_available_child_of_node(np, child) {
|
||||
for_each_gpiochip_node(dev, child) {
|
||||
struct stm32_gpio_bank *bank = &pctl->banks[i];
|
||||
struct device_node *np = to_of_node(child);
|
||||
|
||||
if (of_property_read_bool(child, "gpio-controller")) {
|
||||
bank->rstc = of_reset_control_get_exclusive(child,
|
||||
NULL);
|
||||
if (PTR_ERR(bank->rstc) == -EPROBE_DEFER) {
|
||||
of_node_put(child);
|
||||
return -EPROBE_DEFER;
|
||||
}
|
||||
|
||||
bank->clk = of_clk_get_by_name(child, NULL);
|
||||
if (IS_ERR(bank->clk)) {
|
||||
if (PTR_ERR(bank->clk) != -EPROBE_DEFER)
|
||||
dev_err(dev,
|
||||
"failed to get clk (%ld)\n",
|
||||
PTR_ERR(bank->clk));
|
||||
of_node_put(child);
|
||||
return PTR_ERR(bank->clk);
|
||||
}
|
||||
i++;
|
||||
bank->rstc = of_reset_control_get_exclusive(np, NULL);
|
||||
if (PTR_ERR(bank->rstc) == -EPROBE_DEFER) {
|
||||
fwnode_handle_put(child);
|
||||
return -EPROBE_DEFER;
|
||||
}
|
||||
|
||||
bank->clk = of_clk_get_by_name(np, NULL);
|
||||
if (IS_ERR(bank->clk)) {
|
||||
if (PTR_ERR(bank->clk) != -EPROBE_DEFER)
|
||||
dev_err(dev, "failed to get clk (%ld)\n", PTR_ERR(bank->clk));
|
||||
fwnode_handle_put(child);
|
||||
return PTR_ERR(bank->clk);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
for_each_available_child_of_node(np, child) {
|
||||
if (of_property_read_bool(child, "gpio-controller")) {
|
||||
ret = stm32_gpiolib_register_bank(pctl, child);
|
||||
if (ret) {
|
||||
of_node_put(child);
|
||||
return ret;
|
||||
}
|
||||
for_each_gpiochip_node(dev, child) {
|
||||
ret = stm32_gpiolib_register_bank(pctl, child);
|
||||
if (ret) {
|
||||
fwnode_handle_put(child);
|
||||
|
||||
pctl->nbanks++;
|
||||
for (i = 0; i < pctl->nbanks; i++)
|
||||
clk_disable_unprepare(pctl->banks[i].clk);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
pctl->nbanks++;
|
||||
}
|
||||
|
||||
dev_info(dev, "Pinctrl STM32 initialized\n");
|
||||
@ -1601,6 +1644,9 @@ static int __maybe_unused stm32_pinctrl_restore_gpio_regs(
|
||||
if (!range)
|
||||
return 0;
|
||||
|
||||
if (!gpiochip_line_is_valid(range->gc, offset))
|
||||
return 0;
|
||||
|
||||
pin_is_irq = gpiochip_line_is_irq(range->gc, offset);
|
||||
|
||||
if (!desc || (!pin_is_irq && !desc->gpio_owner))
|
||||
@ -1647,12 +1693,26 @@ static int __maybe_unused stm32_pinctrl_restore_gpio_regs(
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __maybe_unused stm32_pinctrl_suspend(struct device *dev)
|
||||
{
|
||||
struct stm32_pinctrl *pctl = dev_get_drvdata(dev);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < pctl->nbanks; i++)
|
||||
clk_disable(pctl->banks[i].clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __maybe_unused stm32_pinctrl_resume(struct device *dev)
|
||||
{
|
||||
struct stm32_pinctrl *pctl = dev_get_drvdata(dev);
|
||||
struct stm32_pinctrl_group *g = pctl->groups;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < pctl->nbanks; i++)
|
||||
clk_enable(pctl->banks[i].clk);
|
||||
|
||||
for (i = 0; i < pctl->ngroups; i++, g++)
|
||||
stm32_pinctrl_restore_gpio_regs(pctl, g->pin);
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
#define STM32_PIN_GPIO 0
|
||||
#define STM32_PIN_AF(x) ((x) + 1)
|
||||
#define STM32_PIN_ANALOG (STM32_PIN_AF(15) + 1)
|
||||
#define STM32_CONFIG_NUM (STM32_PIN_ANALOG + 1)
|
||||
|
||||
/* package information */
|
||||
#define STM32MP_PKG_AA BIT(0)
|
||||
@ -31,26 +32,26 @@ struct stm32_desc_function {
|
||||
|
||||
struct stm32_desc_pin {
|
||||
struct pinctrl_pin_desc pin;
|
||||
const struct stm32_desc_function *functions;
|
||||
const struct stm32_desc_function functions[STM32_CONFIG_NUM];
|
||||
const unsigned int pkg;
|
||||
};
|
||||
|
||||
#define STM32_PIN(_pin, ...) \
|
||||
{ \
|
||||
.pin = _pin, \
|
||||
.functions = (struct stm32_desc_function[]){ \
|
||||
__VA_ARGS__, { } }, \
|
||||
.functions = { \
|
||||
__VA_ARGS__}, \
|
||||
}
|
||||
|
||||
#define STM32_PIN_PKG(_pin, _pkg, ...) \
|
||||
{ \
|
||||
.pin = _pin, \
|
||||
.pkg = _pkg, \
|
||||
.functions = (struct stm32_desc_function[]){ \
|
||||
__VA_ARGS__, { } }, \
|
||||
.functions = { \
|
||||
__VA_ARGS__}, \
|
||||
}
|
||||
#define STM32_FUNCTION(_num, _name) \
|
||||
{ \
|
||||
[_num] = { \
|
||||
.num = _num, \
|
||||
.name = _name, \
|
||||
}
|
||||
@ -58,6 +59,7 @@ struct stm32_desc_pin {
|
||||
struct stm32_pinctrl_match_data {
|
||||
const struct stm32_desc_pin *pins;
|
||||
const unsigned int npins;
|
||||
bool secure_control;
|
||||
};
|
||||
|
||||
struct stm32_gpio_bank;
|
||||
@ -65,6 +67,7 @@ struct stm32_gpio_bank;
|
||||
int stm32_pctl_probe(struct platform_device *pdev);
|
||||
void stm32_pmx_get_mode(struct stm32_gpio_bank *bank,
|
||||
int pin, u32 *mode, u32 *alt);
|
||||
int stm32_pinctrl_suspend(struct device *dev);
|
||||
int stm32_pinctrl_resume(struct device *dev);
|
||||
|
||||
#endif /* __PINCTRL_STM32_H */
|
||||
|
@ -1649,6 +1649,7 @@ static const struct stm32_desc_pin stm32mp135_pins[] = {
|
||||
static struct stm32_pinctrl_match_data stm32mp135_match_data = {
|
||||
.pins = stm32mp135_pins,
|
||||
.npins = ARRAY_SIZE(stm32mp135_pins),
|
||||
.secure_control = true,
|
||||
};
|
||||
|
||||
static const struct of_device_id stm32mp135_pctrl_match[] = {
|
||||
@ -1660,7 +1661,7 @@ static const struct of_device_id stm32mp135_pctrl_match[] = {
|
||||
};
|
||||
|
||||
static const struct dev_pm_ops stm32_pinctrl_dev_pm_ops = {
|
||||
SET_LATE_SYSTEM_SLEEP_PM_OPS(NULL, stm32_pinctrl_resume)
|
||||
SET_LATE_SYSTEM_SLEEP_PM_OPS(stm32_pinctrl_suspend, stm32_pinctrl_resume)
|
||||
};
|
||||
|
||||
static struct platform_driver stm32mp135_pinctrl_driver = {
|
||||
|
@ -2343,7 +2343,7 @@ static const struct of_device_id stm32mp157_pctrl_match[] = {
|
||||
};
|
||||
|
||||
static const struct dev_pm_ops stm32_pinctrl_dev_pm_ops = {
|
||||
SET_LATE_SYSTEM_SLEEP_PM_OPS(NULL, stm32_pinctrl_resume)
|
||||
SET_LATE_SYSTEM_SLEEP_PM_OPS(stm32_pinctrl_suspend, stm32_pinctrl_resume)
|
||||
};
|
||||
|
||||
static struct platform_driver stm32mp157_pinctrl_driver = {
|
||||
|
@ -871,6 +871,9 @@ static int sppctl_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node
|
||||
}
|
||||
|
||||
*map = kcalloc(*num_maps + nmG, sizeof(**map), GFP_KERNEL);
|
||||
if (*map == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < (*num_maps); i++) {
|
||||
dt_pin = be32_to_cpu(list[i]);
|
||||
pin_num = FIELD_GET(GENMASK(31, 24), dt_pin);
|
||||
|
@ -29,7 +29,6 @@ config PINCTRL_SUN6I_A31
|
||||
config PINCTRL_SUN6I_A31_R
|
||||
bool "Support for the Allwinner A31 R-PIO"
|
||||
default MACH_SUN6I
|
||||
depends on RESET_CONTROLLER
|
||||
select PINCTRL_SUNXI
|
||||
|
||||
config PINCTRL_SUN8I_A23
|
||||
@ -55,7 +54,6 @@ config PINCTRL_SUN8I_A83T_R
|
||||
config PINCTRL_SUN8I_A23_R
|
||||
bool "Support for the Allwinner A23 and A33 R-PIO"
|
||||
default MACH_SUN8I
|
||||
depends on RESET_CONTROLLER
|
||||
select PINCTRL_SUNXI
|
||||
|
||||
config PINCTRL_SUN8I_H3
|
||||
@ -81,7 +79,11 @@ config PINCTRL_SUN9I_A80
|
||||
config PINCTRL_SUN9I_A80_R
|
||||
bool "Support for the Allwinner A80 R-PIO"
|
||||
default MACH_SUN9I
|
||||
depends on RESET_CONTROLLER
|
||||
select PINCTRL_SUNXI
|
||||
|
||||
config PINCTRL_SUN20I_D1
|
||||
bool "Support for the Allwinner D1 PIO"
|
||||
default MACH_SUN8I || (RISCV && ARCH_SUNXI)
|
||||
select PINCTRL_SUNXI
|
||||
|
||||
config PINCTRL_SUN50I_A64
|
||||
|
@ -20,6 +20,7 @@ obj-$(CONFIG_PINCTRL_SUN8I_A83T_R) += pinctrl-sun8i-a83t-r.o
|
||||
obj-$(CONFIG_PINCTRL_SUN8I_H3) += pinctrl-sun8i-h3.o
|
||||
obj-$(CONFIG_PINCTRL_SUN8I_H3_R) += pinctrl-sun8i-h3-r.o
|
||||
obj-$(CONFIG_PINCTRL_SUN8I_V3S) += pinctrl-sun8i-v3s.o
|
||||
obj-$(CONFIG_PINCTRL_SUN20I_D1) += pinctrl-sun20i-d1.o
|
||||
obj-$(CONFIG_PINCTRL_SUN50I_H5) += pinctrl-sun50i-h5.o
|
||||
obj-$(CONFIG_PINCTRL_SUN50I_H6) += pinctrl-sun50i-h6.o
|
||||
obj-$(CONFIG_PINCTRL_SUN50I_H6_R) += pinctrl-sun50i-h6-r.o
|
||||
|
@ -82,6 +82,7 @@ static const struct sunxi_pinctrl_desc a100_r_pinctrl_data = {
|
||||
.npins = ARRAY_SIZE(a100_r_pins),
|
||||
.pin_base = PL_BASE,
|
||||
.irq_banks = 1,
|
||||
.io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_CTL,
|
||||
};
|
||||
|
||||
static int a100_r_pinctrl_probe(struct platform_device *pdev)
|
||||
|
@ -684,7 +684,7 @@ static const struct sunxi_pinctrl_desc a100_pinctrl_data = {
|
||||
.npins = ARRAY_SIZE(a100_pins),
|
||||
.irq_banks = 7,
|
||||
.irq_bank_map = a100_irq_bank_map,
|
||||
.io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_SEL,
|
||||
.io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_CTL,
|
||||
};
|
||||
|
||||
static int a100_pinctrl_probe(struct platform_device *pdev)
|
||||
|
@ -24,7 +24,6 @@
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/reset.h>
|
||||
|
||||
#include "pinctrl-sunxi.h"
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/reset.h>
|
||||
|
||||
#include "pinctrl-sunxi.h"
|
||||
|
||||
@ -107,6 +106,7 @@ static const struct sunxi_pinctrl_desc sun50i_h6_r_pinctrl_data = {
|
||||
.npins = ARRAY_SIZE(sun50i_h6_r_pins),
|
||||
.pin_base = PL_BASE,
|
||||
.irq_banks = 2,
|
||||
.io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_SEL,
|
||||
};
|
||||
|
||||
static int sun50i_h6_r_pinctrl_probe(struct platform_device *pdev)
|
||||
|
@ -12,7 +12,6 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/reset.h>
|
||||
|
||||
#include "pinctrl-sunxi.h"
|
||||
|
||||
|
@ -525,7 +525,7 @@ static const struct sunxi_pinctrl_desc h616_pinctrl_data = {
|
||||
.irq_banks = ARRAY_SIZE(h616_irq_bank_map),
|
||||
.irq_bank_map = h616_irq_bank_map,
|
||||
.irq_read_needs_mux = true,
|
||||
.io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_SEL,
|
||||
.io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_CTL,
|
||||
};
|
||||
|
||||
static int h616_pinctrl_probe(struct platform_device *pdev)
|
||||
|
@ -17,7 +17,6 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/reset.h>
|
||||
|
||||
#include "pinctrl-sunxi.h"
|
||||
|
||||
@ -111,26 +110,7 @@ static const struct sunxi_pinctrl_desc sun6i_a31_r_pinctrl_data = {
|
||||
|
||||
static int sun6i_a31_r_pinctrl_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct reset_control *rstc;
|
||||
int ret;
|
||||
|
||||
rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
|
||||
if (IS_ERR(rstc)) {
|
||||
dev_err(&pdev->dev, "Reset controller missing\n");
|
||||
return PTR_ERR(rstc);
|
||||
}
|
||||
|
||||
ret = reset_control_deassert(rstc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = sunxi_pinctrl_init(pdev,
|
||||
&sun6i_a31_r_pinctrl_data);
|
||||
|
||||
if (ret)
|
||||
reset_control_assert(rstc);
|
||||
|
||||
return ret;
|
||||
return sunxi_pinctrl_init(pdev, &sun6i_a31_r_pinctrl_data);
|
||||
}
|
||||
|
||||
static const struct of_device_id sun6i_a31_r_pinctrl_match[] = {
|
||||
|
@ -20,7 +20,6 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/reset.h>
|
||||
|
||||
#include "pinctrl-sunxi.h"
|
||||
|
||||
@ -98,29 +97,7 @@ static const struct sunxi_pinctrl_desc sun8i_a23_r_pinctrl_data = {
|
||||
|
||||
static int sun8i_a23_r_pinctrl_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct reset_control *rstc;
|
||||
int ret;
|
||||
|
||||
rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
|
||||
if (IS_ERR(rstc)) {
|
||||
ret = PTR_ERR(rstc);
|
||||
if (ret == -EPROBE_DEFER)
|
||||
return ret;
|
||||
dev_err(&pdev->dev, "Reset controller missing err=%d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = reset_control_deassert(rstc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = sunxi_pinctrl_init(pdev,
|
||||
&sun8i_a23_r_pinctrl_data);
|
||||
|
||||
if (ret)
|
||||
reset_control_assert(rstc);
|
||||
|
||||
return ret;
|
||||
return sunxi_pinctrl_init(pdev, &sun8i_a23_r_pinctrl_data);
|
||||
}
|
||||
|
||||
static const struct of_device_id sun8i_a23_r_pinctrl_match[] = {
|
||||
|
@ -27,7 +27,6 @@
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/reset.h>
|
||||
|
||||
#include "pinctrl-sunxi.h"
|
||||
|
||||
|
@ -158,26 +158,26 @@ static const struct sunxi_desc_pin sun8i_a83t_pins[] = {
|
||||
SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),
|
||||
SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
SUNXI_FUNCTION(0x2, "nand"), /* DQ6 */
|
||||
SUNXI_FUNCTION(0x2, "nand0"), /* DQ6 */
|
||||
SUNXI_FUNCTION(0x3, "mmc2")), /* D6 */
|
||||
SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),
|
||||
SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
SUNXI_FUNCTION(0x2, "nand"), /* DQ7 */
|
||||
SUNXI_FUNCTION(0x2, "nand0"), /* DQ7 */
|
||||
SUNXI_FUNCTION(0x3, "mmc2")), /* D7 */
|
||||
SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16),
|
||||
SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
SUNXI_FUNCTION(0x2, "nand"), /* DQS */
|
||||
SUNXI_FUNCTION(0x2, "nand0"), /* DQS */
|
||||
SUNXI_FUNCTION(0x3, "mmc2")), /* RST */
|
||||
SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 17),
|
||||
SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
SUNXI_FUNCTION(0x2, "nand")), /* CE2 */
|
||||
SUNXI_FUNCTION(0x2, "nand0")), /* CE2 */
|
||||
SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 18),
|
||||
SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
SUNXI_FUNCTION(0x2, "nand")), /* CE3 */
|
||||
SUNXI_FUNCTION(0x2, "nand0")), /* CE3 */
|
||||
/* Hole */
|
||||
SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
|
||||
SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
|
@ -14,7 +14,6 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/reset.h>
|
||||
|
||||
#include "pinctrl-sunxi.h"
|
||||
|
||||
|
@ -51,7 +51,7 @@ static const struct sunxi_desc_pin suniv_f1c100s_pins[] = {
|
||||
SUNXI_FUNCTION(0x3, "pwm0"), /* PWM0 */
|
||||
SUNXI_FUNCTION(0x4, "i2s"), /* IN */
|
||||
SUNXI_FUNCTION(0x5, "uart1"), /* RX */
|
||||
SUNXI_FUNCTION(0x6, "spi1")), /* MOSI */
|
||||
SUNXI_FUNCTION(0x6, "spi1")), /* CLK */
|
||||
SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 3),
|
||||
SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
@ -204,7 +204,7 @@ static const struct sunxi_desc_pin suniv_f1c100s_pins[] = {
|
||||
SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
SUNXI_FUNCTION(0x1, "gpio_out"),
|
||||
SUNXI_FUNCTION(0x2, "lcd"), /* D20 */
|
||||
SUNXI_FUNCTION(0x3, "lvds1"), /* RX */
|
||||
SUNXI_FUNCTION(0x3, "uart2"), /* RX */
|
||||
SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)),
|
||||
SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
|
||||
SUNXI_FUNCTION(0x0, "gpio_in"),
|
||||
|
@ -46,6 +46,67 @@ static struct lock_class_key sunxi_pinctrl_irq_request_class;
|
||||
static struct irq_chip sunxi_pinctrl_edge_irq_chip;
|
||||
static struct irq_chip sunxi_pinctrl_level_irq_chip;
|
||||
|
||||
/*
|
||||
* The sunXi PIO registers are organized as a series of banks, with registers
|
||||
* for each bank in the following order:
|
||||
* - Mux config
|
||||
* - Data value
|
||||
* - Drive level
|
||||
* - Pull direction
|
||||
*
|
||||
* Multiple consecutive registers are used for fields wider than one bit.
|
||||
*
|
||||
* The following functions calculate the register and the bit offset to access.
|
||||
* They take a pin number which is relative to the start of the current device.
|
||||
*/
|
||||
static void sunxi_mux_reg(const struct sunxi_pinctrl *pctl,
|
||||
u32 pin, u32 *reg, u32 *shift, u32 *mask)
|
||||
{
|
||||
u32 bank = pin / PINS_PER_BANK;
|
||||
u32 offset = pin % PINS_PER_BANK * MUX_FIELD_WIDTH;
|
||||
|
||||
*reg = bank * pctl->bank_mem_size + MUX_REGS_OFFSET +
|
||||
offset / BITS_PER_TYPE(u32) * sizeof(u32);
|
||||
*shift = offset % BITS_PER_TYPE(u32);
|
||||
*mask = (BIT(MUX_FIELD_WIDTH) - 1) << *shift;
|
||||
}
|
||||
|
||||
static void sunxi_data_reg(const struct sunxi_pinctrl *pctl,
|
||||
u32 pin, u32 *reg, u32 *shift, u32 *mask)
|
||||
{
|
||||
u32 bank = pin / PINS_PER_BANK;
|
||||
u32 offset = pin % PINS_PER_BANK * DATA_FIELD_WIDTH;
|
||||
|
||||
*reg = bank * pctl->bank_mem_size + DATA_REGS_OFFSET +
|
||||
offset / BITS_PER_TYPE(u32) * sizeof(u32);
|
||||
*shift = offset % BITS_PER_TYPE(u32);
|
||||
*mask = (BIT(DATA_FIELD_WIDTH) - 1) << *shift;
|
||||
}
|
||||
|
||||
static void sunxi_dlevel_reg(const struct sunxi_pinctrl *pctl,
|
||||
u32 pin, u32 *reg, u32 *shift, u32 *mask)
|
||||
{
|
||||
u32 bank = pin / PINS_PER_BANK;
|
||||
u32 offset = pin % PINS_PER_BANK * pctl->dlevel_field_width;
|
||||
|
||||
*reg = bank * pctl->bank_mem_size + DLEVEL_REGS_OFFSET +
|
||||
offset / BITS_PER_TYPE(u32) * sizeof(u32);
|
||||
*shift = offset % BITS_PER_TYPE(u32);
|
||||
*mask = (BIT(pctl->dlevel_field_width) - 1) << *shift;
|
||||
}
|
||||
|
||||
static void sunxi_pull_reg(const struct sunxi_pinctrl *pctl,
|
||||
u32 pin, u32 *reg, u32 *shift, u32 *mask)
|
||||
{
|
||||
u32 bank = pin / PINS_PER_BANK;
|
||||
u32 offset = pin % PINS_PER_BANK * PULL_FIELD_WIDTH;
|
||||
|
||||
*reg = bank * pctl->bank_mem_size + pctl->pull_regs_offset +
|
||||
offset / BITS_PER_TYPE(u32) * sizeof(u32);
|
||||
*shift = offset % BITS_PER_TYPE(u32);
|
||||
*mask = (BIT(PULL_FIELD_WIDTH) - 1) << *shift;
|
||||
}
|
||||
|
||||
static struct sunxi_pinctrl_group *
|
||||
sunxi_pinctrl_find_group_by_name(struct sunxi_pinctrl *pctl, const char *group)
|
||||
{
|
||||
@ -451,22 +512,19 @@ static const struct pinctrl_ops sunxi_pctrl_ops = {
|
||||
.get_group_pins = sunxi_pctrl_get_group_pins,
|
||||
};
|
||||
|
||||
static int sunxi_pconf_reg(unsigned pin, enum pin_config_param param,
|
||||
u32 *offset, u32 *shift, u32 *mask)
|
||||
static int sunxi_pconf_reg(const struct sunxi_pinctrl *pctl,
|
||||
u32 pin, enum pin_config_param param,
|
||||
u32 *reg, u32 *shift, u32 *mask)
|
||||
{
|
||||
switch (param) {
|
||||
case PIN_CONFIG_DRIVE_STRENGTH:
|
||||
*offset = sunxi_dlevel_reg(pin);
|
||||
*shift = sunxi_dlevel_offset(pin);
|
||||
*mask = DLEVEL_PINS_MASK;
|
||||
sunxi_dlevel_reg(pctl, pin, reg, shift, mask);
|
||||
break;
|
||||
|
||||
case PIN_CONFIG_BIAS_PULL_UP:
|
||||
case PIN_CONFIG_BIAS_PULL_DOWN:
|
||||
case PIN_CONFIG_BIAS_DISABLE:
|
||||
*offset = sunxi_pull_reg(pin);
|
||||
*shift = sunxi_pull_offset(pin);
|
||||
*mask = PULL_PINS_MASK;
|
||||
sunxi_pull_reg(pctl, pin, reg, shift, mask);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -481,17 +539,17 @@ static int sunxi_pconf_get(struct pinctrl_dev *pctldev, unsigned pin,
|
||||
{
|
||||
struct sunxi_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
|
||||
enum pin_config_param param = pinconf_to_config_param(*config);
|
||||
u32 offset, shift, mask, val;
|
||||
u32 reg, shift, mask, val;
|
||||
u16 arg;
|
||||
int ret;
|
||||
|
||||
pin -= pctl->desc->pin_base;
|
||||
|
||||
ret = sunxi_pconf_reg(pin, param, &offset, &shift, &mask);
|
||||
ret = sunxi_pconf_reg(pctl, pin, param, ®, &shift, &mask);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
val = (readl(pctl->membase + offset) >> shift) & mask;
|
||||
val = (readl(pctl->membase + reg) & mask) >> shift;
|
||||
|
||||
switch (pinconf_to_config_param(*config)) {
|
||||
case PIN_CONFIG_DRIVE_STRENGTH:
|
||||
@ -544,17 +602,18 @@ static int sunxi_pconf_set(struct pinctrl_dev *pctldev, unsigned pin,
|
||||
struct sunxi_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
|
||||
int i;
|
||||
|
||||
pin -= pctl->desc->pin_base;
|
||||
|
||||
for (i = 0; i < num_configs; i++) {
|
||||
u32 arg, reg, shift, mask, val;
|
||||
enum pin_config_param param;
|
||||
unsigned long flags;
|
||||
u32 offset, shift, mask, reg;
|
||||
u32 arg, val;
|
||||
int ret;
|
||||
|
||||
param = pinconf_to_config_param(configs[i]);
|
||||
arg = pinconf_to_config_argument(configs[i]);
|
||||
|
||||
ret = sunxi_pconf_reg(pin, param, &offset, &shift, &mask);
|
||||
ret = sunxi_pconf_reg(pctl, pin, param, ®, &shift, &mask);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@ -591,9 +650,8 @@ static int sunxi_pconf_set(struct pinctrl_dev *pctldev, unsigned pin,
|
||||
}
|
||||
|
||||
raw_spin_lock_irqsave(&pctl->lock, flags);
|
||||
reg = readl(pctl->membase + offset);
|
||||
reg &= ~(mask << shift);
|
||||
writel(reg | val << shift, pctl->membase + offset);
|
||||
writel((readl(pctl->membase + reg) & ~mask) | val << shift,
|
||||
pctl->membase + reg);
|
||||
raw_spin_unlock_irqrestore(&pctl->lock, flags);
|
||||
} /* for each config */
|
||||
|
||||
@ -622,7 +680,7 @@ static int sunxi_pinctrl_set_io_bias_cfg(struct sunxi_pinctrl *pctl,
|
||||
unsigned pin,
|
||||
struct regulator *supply)
|
||||
{
|
||||
unsigned short bank = pin / PINS_PER_BANK;
|
||||
unsigned short bank;
|
||||
unsigned long flags;
|
||||
u32 val, reg;
|
||||
int uV;
|
||||
@ -638,6 +696,9 @@ static int sunxi_pinctrl_set_io_bias_cfg(struct sunxi_pinctrl *pctl,
|
||||
if (uV == 0)
|
||||
return 0;
|
||||
|
||||
pin -= pctl->desc->pin_base;
|
||||
bank = pin / PINS_PER_BANK;
|
||||
|
||||
switch (pctl->desc->io_bias_cfg_variant) {
|
||||
case BIAS_VOLTAGE_GRP_CONFIG:
|
||||
/*
|
||||
@ -655,12 +716,20 @@ static int sunxi_pinctrl_set_io_bias_cfg(struct sunxi_pinctrl *pctl,
|
||||
else
|
||||
val = 0xD; /* 3.3V */
|
||||
|
||||
pin -= pctl->desc->pin_base;
|
||||
|
||||
reg = readl(pctl->membase + sunxi_grp_config_reg(pin));
|
||||
reg &= ~IO_BIAS_MASK;
|
||||
writel(reg | val, pctl->membase + sunxi_grp_config_reg(pin));
|
||||
return 0;
|
||||
case BIAS_VOLTAGE_PIO_POW_MODE_CTL:
|
||||
val = uV > 1800000 && uV <= 2500000 ? BIT(bank) : 0;
|
||||
|
||||
raw_spin_lock_irqsave(&pctl->lock, flags);
|
||||
reg = readl(pctl->membase + PIO_POW_MOD_CTL_REG);
|
||||
reg &= ~BIT(bank);
|
||||
writel(reg | val, pctl->membase + PIO_POW_MOD_CTL_REG);
|
||||
raw_spin_unlock_irqrestore(&pctl->lock, flags);
|
||||
|
||||
fallthrough;
|
||||
case BIAS_VOLTAGE_PIO_POW_MODE_SEL:
|
||||
val = uV <= 1800000 ? 1 : 0;
|
||||
|
||||
@ -708,16 +777,16 @@ static void sunxi_pmx_set(struct pinctrl_dev *pctldev,
|
||||
u8 config)
|
||||
{
|
||||
struct sunxi_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
|
||||
u32 reg, shift, mask;
|
||||
unsigned long flags;
|
||||
u32 val, mask;
|
||||
|
||||
pin -= pctl->desc->pin_base;
|
||||
sunxi_mux_reg(pctl, pin, ®, &shift, &mask);
|
||||
|
||||
raw_spin_lock_irqsave(&pctl->lock, flags);
|
||||
|
||||
pin -= pctl->desc->pin_base;
|
||||
val = readl(pctl->membase + sunxi_mux_reg(pin));
|
||||
mask = MUX_PINS_MASK << sunxi_mux_offset(pin);
|
||||
writel((val & ~mask) | config << sunxi_mux_offset(pin),
|
||||
pctl->membase + sunxi_mux_reg(pin));
|
||||
writel((readl(pctl->membase + reg) & ~mask) | config << shift,
|
||||
pctl->membase + reg);
|
||||
|
||||
raw_spin_unlock_irqrestore(&pctl->lock, flags);
|
||||
}
|
||||
@ -850,43 +919,43 @@ static int sunxi_pinctrl_gpio_direction_input(struct gpio_chip *chip,
|
||||
static int sunxi_pinctrl_gpio_get(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
struct sunxi_pinctrl *pctl = gpiochip_get_data(chip);
|
||||
u32 reg = sunxi_data_reg(offset);
|
||||
u8 index = sunxi_data_offset(offset);
|
||||
bool set_mux = pctl->desc->irq_read_needs_mux &&
|
||||
gpiochip_line_is_irq(chip, offset);
|
||||
u32 pin = offset + chip->base;
|
||||
u32 val;
|
||||
u32 reg, shift, mask, val;
|
||||
|
||||
sunxi_data_reg(pctl, offset, ®, &shift, &mask);
|
||||
|
||||
if (set_mux)
|
||||
sunxi_pmx_set(pctl->pctl_dev, pin, SUN4I_FUNC_INPUT);
|
||||
|
||||
val = (readl(pctl->membase + reg) >> index) & DATA_PINS_MASK;
|
||||
val = (readl(pctl->membase + reg) & mask) >> shift;
|
||||
|
||||
if (set_mux)
|
||||
sunxi_pmx_set(pctl->pctl_dev, pin, SUN4I_FUNC_IRQ);
|
||||
|
||||
return !!val;
|
||||
return val;
|
||||
}
|
||||
|
||||
static void sunxi_pinctrl_gpio_set(struct gpio_chip *chip,
|
||||
unsigned offset, int value)
|
||||
{
|
||||
struct sunxi_pinctrl *pctl = gpiochip_get_data(chip);
|
||||
u32 reg = sunxi_data_reg(offset);
|
||||
u8 index = sunxi_data_offset(offset);
|
||||
u32 reg, shift, mask, val;
|
||||
unsigned long flags;
|
||||
u32 regval;
|
||||
|
||||
sunxi_data_reg(pctl, offset, ®, &shift, &mask);
|
||||
|
||||
raw_spin_lock_irqsave(&pctl->lock, flags);
|
||||
|
||||
regval = readl(pctl->membase + reg);
|
||||
val = readl(pctl->membase + reg);
|
||||
|
||||
if (value)
|
||||
regval |= BIT(index);
|
||||
val |= mask;
|
||||
else
|
||||
regval &= ~(BIT(index));
|
||||
val &= ~mask;
|
||||
|
||||
writel(regval, pctl->membase + reg);
|
||||
writel(val, pctl->membase + reg);
|
||||
|
||||
raw_spin_unlock_irqrestore(&pctl->lock, flags);
|
||||
}
|
||||
@ -1230,11 +1299,11 @@ static int sunxi_pinctrl_build_state(struct platform_device *pdev)
|
||||
|
||||
/*
|
||||
* Find an upper bound for the maximum number of functions: in
|
||||
* the worst case we have gpio_in, gpio_out, irq and up to four
|
||||
* the worst case we have gpio_in, gpio_out, irq and up to seven
|
||||
* special functions per pin, plus one entry for the sentinel.
|
||||
* We'll reallocate that later anyway.
|
||||
*/
|
||||
pctl->functions = kcalloc(4 * pctl->ngroups + 4,
|
||||
pctl->functions = kcalloc(7 * pctl->ngroups + 4,
|
||||
sizeof(*pctl->functions),
|
||||
GFP_KERNEL);
|
||||
if (!pctl->functions)
|
||||
@ -1427,6 +1496,15 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,
|
||||
pctl->dev = &pdev->dev;
|
||||
pctl->desc = desc;
|
||||
pctl->variant = variant;
|
||||
if (pctl->variant >= PINCTRL_SUN20I_D1) {
|
||||
pctl->bank_mem_size = D1_BANK_MEM_SIZE;
|
||||
pctl->pull_regs_offset = D1_PULL_REGS_OFFSET;
|
||||
pctl->dlevel_field_width = D1_DLEVEL_FIELD_WIDTH;
|
||||
} else {
|
||||
pctl->bank_mem_size = BANK_MEM_SIZE;
|
||||
pctl->pull_regs_offset = PULL_REGS_OFFSET;
|
||||
pctl->dlevel_field_width = DLEVEL_FIELD_WIDTH;
|
||||
}
|
||||
|
||||
pctl->irq_array = devm_kcalloc(&pdev->dev,
|
||||
IRQ_PER_BANK * pctl->desc->irq_banks,
|
||||
|
@ -36,23 +36,19 @@
|
||||
|
||||
#define BANK_MEM_SIZE 0x24
|
||||
#define MUX_REGS_OFFSET 0x0
|
||||
#define MUX_FIELD_WIDTH 4
|
||||
#define DATA_REGS_OFFSET 0x10
|
||||
#define DATA_FIELD_WIDTH 1
|
||||
#define DLEVEL_REGS_OFFSET 0x14
|
||||
#define DLEVEL_FIELD_WIDTH 2
|
||||
#define PULL_REGS_OFFSET 0x1c
|
||||
#define PULL_FIELD_WIDTH 2
|
||||
|
||||
#define D1_BANK_MEM_SIZE 0x30
|
||||
#define D1_DLEVEL_FIELD_WIDTH 4
|
||||
#define D1_PULL_REGS_OFFSET 0x24
|
||||
|
||||
#define PINS_PER_BANK 32
|
||||
#define MUX_PINS_PER_REG 8
|
||||
#define MUX_PINS_BITS 4
|
||||
#define MUX_PINS_MASK 0x0f
|
||||
#define DATA_PINS_PER_REG 32
|
||||
#define DATA_PINS_BITS 1
|
||||
#define DATA_PINS_MASK 0x01
|
||||
#define DLEVEL_PINS_PER_REG 16
|
||||
#define DLEVEL_PINS_BITS 2
|
||||
#define DLEVEL_PINS_MASK 0x03
|
||||
#define PULL_PINS_PER_REG 16
|
||||
#define PULL_PINS_BITS 2
|
||||
#define PULL_PINS_MASK 0x03
|
||||
|
||||
#define IRQ_PER_BANK 32
|
||||
|
||||
@ -96,8 +92,11 @@
|
||||
#define PINCTRL_SUN8I_R40 BIT(8)
|
||||
#define PINCTRL_SUN8I_V3 BIT(9)
|
||||
#define PINCTRL_SUN8I_V3S BIT(10)
|
||||
/* Variants below here have an updated register layout. */
|
||||
#define PINCTRL_SUN20I_D1 BIT(11)
|
||||
|
||||
#define PIO_POW_MOD_SEL_REG 0x340
|
||||
#define PIO_POW_MOD_CTL_REG 0x344
|
||||
|
||||
enum sunxi_desc_bias_voltage {
|
||||
BIAS_VOLTAGE_NONE,
|
||||
@ -111,6 +110,12 @@ enum sunxi_desc_bias_voltage {
|
||||
* register, as seen on H6 SoC, for example.
|
||||
*/
|
||||
BIAS_VOLTAGE_PIO_POW_MODE_SEL,
|
||||
/*
|
||||
* Bias voltage is set through PIO_POW_MOD_SEL_REG
|
||||
* and PIO_POW_MOD_CTL_REG register, as seen on
|
||||
* A100 and D1 SoC, for example.
|
||||
*/
|
||||
BIAS_VOLTAGE_PIO_POW_MODE_CTL,
|
||||
};
|
||||
|
||||
struct sunxi_desc_function {
|
||||
@ -170,6 +175,9 @@ struct sunxi_pinctrl {
|
||||
raw_spinlock_t lock;
|
||||
struct pinctrl_dev *pctl_dev;
|
||||
unsigned long variant;
|
||||
u32 bank_mem_size;
|
||||
u32 pull_regs_offset;
|
||||
u32 dlevel_field_width;
|
||||
};
|
||||
|
||||
#define SUNXI_PIN(_pin, ...) \
|
||||
@ -215,83 +223,6 @@ struct sunxi_pinctrl {
|
||||
.irqnum = _irq, \
|
||||
}
|
||||
|
||||
/*
|
||||
* The sunXi PIO registers are organized as is:
|
||||
* 0x00 - 0x0c Muxing values.
|
||||
* 8 pins per register, each pin having a 4bits value
|
||||
* 0x10 Pin values
|
||||
* 32 bits per register, each pin corresponding to one bit
|
||||
* 0x14 - 0x18 Drive level
|
||||
* 16 pins per register, each pin having a 2bits value
|
||||
* 0x1c - 0x20 Pull-Up values
|
||||
* 16 pins per register, each pin having a 2bits value
|
||||
*
|
||||
* This is for the first bank. Each bank will have the same layout,
|
||||
* with an offset being a multiple of 0x24.
|
||||
*
|
||||
* The following functions calculate from the pin number the register
|
||||
* and the bit offset that we should access.
|
||||
*/
|
||||
static inline u32 sunxi_mux_reg(u16 pin)
|
||||
{
|
||||
u8 bank = pin / PINS_PER_BANK;
|
||||
u32 offset = bank * BANK_MEM_SIZE;
|
||||
offset += MUX_REGS_OFFSET;
|
||||
offset += pin % PINS_PER_BANK / MUX_PINS_PER_REG * 0x04;
|
||||
return round_down(offset, 4);
|
||||
}
|
||||
|
||||
static inline u32 sunxi_mux_offset(u16 pin)
|
||||
{
|
||||
u32 pin_num = pin % MUX_PINS_PER_REG;
|
||||
return pin_num * MUX_PINS_BITS;
|
||||
}
|
||||
|
||||
static inline u32 sunxi_data_reg(u16 pin)
|
||||
{
|
||||
u8 bank = pin / PINS_PER_BANK;
|
||||
u32 offset = bank * BANK_MEM_SIZE;
|
||||
offset += DATA_REGS_OFFSET;
|
||||
offset += pin % PINS_PER_BANK / DATA_PINS_PER_REG * 0x04;
|
||||
return round_down(offset, 4);
|
||||
}
|
||||
|
||||
static inline u32 sunxi_data_offset(u16 pin)
|
||||
{
|
||||
u32 pin_num = pin % DATA_PINS_PER_REG;
|
||||
return pin_num * DATA_PINS_BITS;
|
||||
}
|
||||
|
||||
static inline u32 sunxi_dlevel_reg(u16 pin)
|
||||
{
|
||||
u8 bank = pin / PINS_PER_BANK;
|
||||
u32 offset = bank * BANK_MEM_SIZE;
|
||||
offset += DLEVEL_REGS_OFFSET;
|
||||
offset += pin % PINS_PER_BANK / DLEVEL_PINS_PER_REG * 0x04;
|
||||
return round_down(offset, 4);
|
||||
}
|
||||
|
||||
static inline u32 sunxi_dlevel_offset(u16 pin)
|
||||
{
|
||||
u32 pin_num = pin % DLEVEL_PINS_PER_REG;
|
||||
return pin_num * DLEVEL_PINS_BITS;
|
||||
}
|
||||
|
||||
static inline u32 sunxi_pull_reg(u16 pin)
|
||||
{
|
||||
u8 bank = pin / PINS_PER_BANK;
|
||||
u32 offset = bank * BANK_MEM_SIZE;
|
||||
offset += PULL_REGS_OFFSET;
|
||||
offset += pin % PINS_PER_BANK / PULL_PINS_PER_REG * 0x04;
|
||||
return round_down(offset, 4);
|
||||
}
|
||||
|
||||
static inline u32 sunxi_pull_offset(u16 pin)
|
||||
{
|
||||
u32 pin_num = pin % PULL_PINS_PER_REG;
|
||||
return pin_num * PULL_PINS_BITS;
|
||||
}
|
||||
|
||||
static inline u32 sunxi_irq_hw_bank_num(const struct sunxi_pinctrl_desc *desc, u8 bank)
|
||||
{
|
||||
if (!desc->irq_bank_map)
|
||||
|
@ -1110,24 +1110,15 @@ static const unsigned int sdmmc4_dat0_pins[] = {
|
||||
static const unsigned int sdmmc1_comp_pins[] = {
|
||||
TEGRA_PIN_SDMMC1_COMP,
|
||||
};
|
||||
static const unsigned int sdmmc1_hv_trim_pins[] = {
|
||||
TEGRA_PIN_SDMMC1_HV_TRIM,
|
||||
};
|
||||
static const unsigned int sdmmc3_comp_pins[] = {
|
||||
TEGRA_PIN_SDMMC3_COMP,
|
||||
};
|
||||
static const unsigned int sdmmc3_hv_trim_pins[] = {
|
||||
TEGRA_PIN_SDMMC3_HV_TRIM,
|
||||
};
|
||||
static const unsigned int eqos_comp_pins[] = {
|
||||
TEGRA_PIN_EQOS_COMP,
|
||||
};
|
||||
static const unsigned int qspi_comp_pins[] = {
|
||||
TEGRA_PIN_QSPI_COMP,
|
||||
};
|
||||
static const unsigned int sys_reset_n_pins[] = {
|
||||
TEGRA_PIN_SYS_RESET_N,
|
||||
};
|
||||
static const unsigned int shutdown_n_pins[] = {
|
||||
TEGRA_PIN_SHUTDOWN_N,
|
||||
};
|
||||
|
@ -1,7 +1,4 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
if X86
|
||||
source "drivers/platform/x86/Kconfig"
|
||||
endif
|
||||
if MIPS
|
||||
source "drivers/platform/mips/Kconfig"
|
||||
endif
|
||||
@ -15,3 +12,5 @@ source "drivers/platform/mellanox/Kconfig"
|
||||
source "drivers/platform/olpc/Kconfig"
|
||||
|
||||
source "drivers/platform/surface/Kconfig"
|
||||
|
||||
source "drivers/platform/x86/Kconfig"
|
||||
|
@ -15,6 +15,17 @@ menuconfig CHROME_PLATFORMS
|
||||
|
||||
if CHROME_PLATFORMS
|
||||
|
||||
config CHROMEOS_ACPI
|
||||
tristate "ChromeOS specific ACPI extensions"
|
||||
depends on ACPI
|
||||
help
|
||||
This driver provides the firmware interface for the services
|
||||
exported through the ChromeOS interfaces when using ChromeOS
|
||||
ACPI firmware.
|
||||
|
||||
If you have an ACPI-compatible Chromebook, say Y or M here.
|
||||
The module will be called chromeos_acpi.
|
||||
|
||||
config CHROMEOS_LAPTOP
|
||||
tristate "Chrome OS Laptop"
|
||||
depends on I2C && DMI && X86
|
||||
@ -128,7 +139,7 @@ config CROS_EC_PROTO
|
||||
|
||||
config CROS_KBD_LED_BACKLIGHT
|
||||
tristate "Backlight LED support for Chrome OS keyboards"
|
||||
depends on LEDS_CLASS && ACPI
|
||||
depends on LEDS_CLASS && (ACPI || CROS_EC)
|
||||
help
|
||||
This option enables support for the keyboard backlight LEDs on
|
||||
select Chrome OS systems.
|
||||
@ -256,4 +267,13 @@ config CHROMEOS_PRIVACY_SCREEN
|
||||
|
||||
source "drivers/platform/chrome/wilco_ec/Kconfig"
|
||||
|
||||
# Kunit test cases
|
||||
config CROS_KUNIT
|
||||
tristate "Kunit tests for ChromeOS" if !KUNIT_ALL_TESTS
|
||||
depends on KUNIT && CROS_EC
|
||||
default KUNIT_ALL_TESTS
|
||||
select CROS_EC_PROTO
|
||||
help
|
||||
ChromeOS Kunit tests.
|
||||
|
||||
endif # CHROMEOS_PLATFORMS
|
||||
|
@ -4,6 +4,7 @@
|
||||
CFLAGS_cros_ec_trace.o:= -I$(src)
|
||||
CFLAGS_cros_ec_sensorhub_ring.o:= -I$(src)
|
||||
|
||||
obj-$(CONFIG_CHROMEOS_ACPI) += chromeos_acpi.o
|
||||
obj-$(CONFIG_CHROMEOS_LAPTOP) += chromeos_laptop.o
|
||||
obj-$(CONFIG_CHROMEOS_PRIVACY_SCREEN) += chromeos_privacy_screen.o
|
||||
obj-$(CONFIG_CHROMEOS_PSTORE) += chromeos_pstore.o
|
||||
@ -29,3 +30,8 @@ obj-$(CONFIG_CROS_USBPD_LOGGER) += cros_usbpd_logger.o
|
||||
obj-$(CONFIG_CROS_USBPD_NOTIFY) += cros_usbpd_notify.o
|
||||
|
||||
obj-$(CONFIG_WILCO_EC) += wilco_ec/
|
||||
|
||||
# Kunit test cases
|
||||
obj-$(CONFIG_CROS_KUNIT) += cros_kunit.o
|
||||
cros_kunit-objs := cros_kunit_util.o
|
||||
cros_kunit-objs += cros_ec_proto_test.o
|
||||
|
@ -9,19 +9,16 @@
|
||||
* battery charging and regulator control, firmware update.
|
||||
*/
|
||||
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/platform_data/cros_ec_commands.h>
|
||||
#include <linux/platform_data/cros_ec_proto.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/suspend.h>
|
||||
|
||||
#include "cros_ec.h"
|
||||
|
||||
#define CROS_EC_DEV_EC_INDEX 0
|
||||
#define CROS_EC_DEV_PD_INDEX 1
|
||||
|
||||
static struct cros_ec_platform ec_p = {
|
||||
.ec_name = CROS_EC_DEV_NAME,
|
||||
.cmd_offset = EC_CMD_PASSTHRU_OFFSET(CROS_EC_DEV_EC_INDEX),
|
||||
@ -135,16 +132,16 @@ static int cros_ec_sleep_event(struct cros_ec_device *ec_dev, u8 sleep_event)
|
||||
buf.msg.command = EC_CMD_HOST_SLEEP_EVENT;
|
||||
|
||||
ret = cros_ec_cmd_xfer_status(ec_dev, &buf.msg);
|
||||
|
||||
/* For now, report failure to transition to S0ix with a warning. */
|
||||
/* Report failure to transition to system wide suspend with a warning. */
|
||||
if (ret >= 0 && ec_dev->host_sleep_v1 &&
|
||||
(sleep_event == HOST_SLEEP_EVENT_S0IX_RESUME)) {
|
||||
(sleep_event == HOST_SLEEP_EVENT_S0IX_RESUME ||
|
||||
sleep_event == HOST_SLEEP_EVENT_S3_RESUME)) {
|
||||
ec_dev->last_resume_result =
|
||||
buf.u.resp1.resume_response.sleep_transitions;
|
||||
|
||||
WARN_ONCE(buf.u.resp1.resume_response.sleep_transitions &
|
||||
EC_HOST_RESUME_SLEEP_TIMEOUT,
|
||||
"EC detected sleep transition timeout. Total slp_s0 transitions: %d",
|
||||
"EC detected sleep transition timeout. Total sleep transitions: %d",
|
||||
buf.u.resp1.resume_response.sleep_transitions &
|
||||
EC_HOST_RESUME_SLEEP_TRANSITIONS_MASK);
|
||||
}
|
||||
@ -189,6 +186,8 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
|
||||
ec_dev->max_request = sizeof(struct ec_params_hello);
|
||||
ec_dev->max_response = sizeof(struct ec_response_get_protocol_info);
|
||||
ec_dev->max_passthru = 0;
|
||||
ec_dev->ec = NULL;
|
||||
ec_dev->pd = NULL;
|
||||
|
||||
ec_dev->din = devm_kzalloc(dev, ec_dev->din_size, GFP_KERNEL);
|
||||
if (!ec_dev->din)
|
||||
@ -213,7 +212,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
|
||||
IRQF_TRIGGER_LOW | IRQF_ONESHOT,
|
||||
"chromeos-ec", ec_dev);
|
||||
if (err) {
|
||||
dev_err(dev, "Failed to request IRQ %d: %d",
|
||||
dev_err(dev, "Failed to request IRQ %d: %d\n",
|
||||
ec_dev->irq, err);
|
||||
return err;
|
||||
}
|
||||
@ -245,18 +244,16 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
|
||||
if (IS_ERR(ec_dev->pd)) {
|
||||
dev_err(ec_dev->dev,
|
||||
"Failed to create CrOS PD platform device\n");
|
||||
platform_device_unregister(ec_dev->ec);
|
||||
return PTR_ERR(ec_dev->pd);
|
||||
err = PTR_ERR(ec_dev->pd);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_OF) && dev->of_node) {
|
||||
err = devm_of_platform_populate(dev);
|
||||
if (err) {
|
||||
platform_device_unregister(ec_dev->pd);
|
||||
platform_device_unregister(ec_dev->ec);
|
||||
dev_err(dev, "Failed to register sub-devices\n");
|
||||
return err;
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
@ -266,7 +263,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
|
||||
*/
|
||||
err = cros_ec_sleep_event(ec_dev, 0);
|
||||
if (err < 0)
|
||||
dev_dbg(ec_dev->dev, "Error %d clearing sleep event to ec",
|
||||
dev_dbg(ec_dev->dev, "Error %d clearing sleep event to ec\n",
|
||||
err);
|
||||
|
||||
if (ec_dev->mkbp_event_supported) {
|
||||
@ -278,7 +275,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
|
||||
err = blocking_notifier_chain_register(&ec_dev->event_notifier,
|
||||
&ec_dev->notifier_ready);
|
||||
if (err)
|
||||
return err;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
dev_info(dev, "Chrome EC device registered\n");
|
||||
@ -291,6 +288,10 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
|
||||
cros_ec_irq_thread(0, ec_dev);
|
||||
|
||||
return 0;
|
||||
exit:
|
||||
platform_device_unregister(ec_dev->ec);
|
||||
platform_device_unregister(ec_dev->pd);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(cros_ec_register);
|
||||
|
||||
@ -331,14 +332,15 @@ int cros_ec_suspend(struct cros_ec_device *ec_dev)
|
||||
|
||||
ret = cros_ec_sleep_event(ec_dev, sleep_event);
|
||||
if (ret < 0)
|
||||
dev_dbg(ec_dev->dev, "Error %d sending suspend event to ec",
|
||||
dev_dbg(ec_dev->dev, "Error %d sending suspend event to ec\n",
|
||||
ret);
|
||||
|
||||
if (device_may_wakeup(dev))
|
||||
ec_dev->wake_enabled = !enable_irq_wake(ec_dev->irq);
|
||||
else
|
||||
ec_dev->wake_enabled = false;
|
||||
|
||||
disable_irq(ec_dev->irq);
|
||||
ec_dev->was_wake_device = ec_dev->wake_enabled;
|
||||
ec_dev->suspended = true;
|
||||
|
||||
return 0;
|
||||
@ -375,13 +377,12 @@ int cros_ec_resume(struct cros_ec_device *ec_dev)
|
||||
|
||||
ret = cros_ec_sleep_event(ec_dev, sleep_event);
|
||||
if (ret < 0)
|
||||
dev_dbg(ec_dev->dev, "Error %d sending resume event to ec",
|
||||
dev_dbg(ec_dev->dev, "Error %d sending resume event to ec\n",
|
||||
ret);
|
||||
|
||||
if (ec_dev->wake_enabled) {
|
||||
if (ec_dev->wake_enabled)
|
||||
disable_irq_wake(ec_dev->irq);
|
||||
ec_dev->wake_enabled = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Let the mfd devices know about events that occur during
|
||||
* suspend. This way the clients know what to do with them.
|
||||
|
@ -301,7 +301,7 @@ static long cros_ec_chardev_ioctl_xcmd(struct cros_ec_dev *ec, void __user *arg)
|
||||
}
|
||||
|
||||
s_cmd->command += ec->cmd_offset;
|
||||
ret = cros_ec_cmd_xfer_status(ec->ec_dev, s_cmd);
|
||||
ret = cros_ec_cmd_xfer(ec->ec_dev, s_cmd);
|
||||
/* Only copy data to userland if data was received. */
|
||||
if (ret < 0)
|
||||
goto exit;
|
||||
|
@ -72,13 +72,19 @@ static int cros_ec_pkt_xfer_i2c(struct cros_ec_device *ec_dev,
|
||||
i2c_msg[1].flags = I2C_M_RD;
|
||||
|
||||
packet_len = msg->insize + response_header_size;
|
||||
BUG_ON(packet_len > ec_dev->din_size);
|
||||
if (packet_len > ec_dev->din_size) {
|
||||
ret = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
in_buf = ec_dev->din;
|
||||
i2c_msg[1].len = packet_len;
|
||||
i2c_msg[1].buf = (char *) in_buf;
|
||||
|
||||
packet_len = msg->outsize + request_header_size;
|
||||
BUG_ON(packet_len > ec_dev->dout_size);
|
||||
if (packet_len > ec_dev->dout_size) {
|
||||
ret = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
out_buf = ec_dev->dout;
|
||||
i2c_msg[0].len = packet_len;
|
||||
i2c_msg[0].buf = (char *) out_buf;
|
||||
@ -89,6 +95,8 @@ static int cros_ec_pkt_xfer_i2c(struct cros_ec_device *ec_dev,
|
||||
|
||||
ec_dev->dout++;
|
||||
ret = cros_ec_prepare_tx(ec_dev, msg);
|
||||
if (ret < 0)
|
||||
goto done;
|
||||
ec_dev->dout--;
|
||||
|
||||
/* send command to EC and read answer */
|
||||
|
@ -521,7 +521,9 @@ static int cros_ec_pkt_xfer_ish(struct cros_ec_device *ec_dev,
|
||||
out_msg->hdr.status = 0;
|
||||
|
||||
ec_dev->dout += OUT_MSG_EC_REQUEST_PREAMBLE;
|
||||
cros_ec_prepare_tx(ec_dev, msg);
|
||||
rv = cros_ec_prepare_tx(ec_dev, msg);
|
||||
if (rv < 0)
|
||||
goto end_error;
|
||||
ec_dev->dout -= OUT_MSG_EC_REQUEST_PREAMBLE;
|
||||
|
||||
dev_dbg(dev,
|
||||
|
@ -147,6 +147,8 @@ static int cros_ec_pkt_xfer_lpc(struct cros_ec_device *ec,
|
||||
u8 *dout;
|
||||
|
||||
ret = cros_ec_prepare_tx(ec, msg);
|
||||
if (ret < 0)
|
||||
goto done;
|
||||
|
||||
/* Write buffer */
|
||||
cros_ec_lpc_ops.write(EC_LPC_ADDR_HOST_PACKET, ret, ec->dout);
|
||||
@ -341,9 +343,14 @@ static int cros_ec_lpc_probe(struct platform_device *pdev)
|
||||
u8 buf[2];
|
||||
int irq, ret;
|
||||
|
||||
if (!devm_request_region(dev, EC_LPC_ADDR_MEMMAP, EC_MEMMAP_SIZE,
|
||||
dev_name(dev))) {
|
||||
dev_err(dev, "couldn't reserve memmap region\n");
|
||||
/*
|
||||
* The Framework Laptop (and possibly other non-ChromeOS devices)
|
||||
* only exposes the eight I/O ports that are required for the Microchip EC.
|
||||
* Requesting a larger reservation will fail.
|
||||
*/
|
||||
if (!devm_request_region(dev, EC_HOST_CMD_REGION0,
|
||||
EC_HOST_CMD_MEC_REGION_SIZE, dev_name(dev))) {
|
||||
dev_err(dev, "couldn't reserve MEC region\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
@ -357,6 +364,12 @@ static int cros_ec_lpc_probe(struct platform_device *pdev)
|
||||
cros_ec_lpc_ops.write = cros_ec_lpc_mec_write_bytes;
|
||||
cros_ec_lpc_ops.read(EC_LPC_ADDR_MEMMAP + EC_MEMMAP_ID, 2, buf);
|
||||
if (buf[0] != 'E' || buf[1] != 'C') {
|
||||
if (!devm_request_region(dev, EC_LPC_ADDR_MEMMAP, EC_MEMMAP_SIZE,
|
||||
dev_name(dev))) {
|
||||
dev_err(dev, "couldn't reserve memmap region\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
/* Re-assign read/write operations for the non MEC variant */
|
||||
cros_ec_lpc_ops.read = cros_ec_lpc_read_bytes;
|
||||
cros_ec_lpc_ops.write = cros_ec_lpc_write_bytes;
|
||||
@ -366,17 +379,19 @@ static int cros_ec_lpc_probe(struct platform_device *pdev)
|
||||
dev_err(dev, "EC ID not detected\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
|
||||
if (!devm_request_region(dev, EC_HOST_CMD_REGION0,
|
||||
EC_HOST_CMD_REGION_SIZE, dev_name(dev))) {
|
||||
dev_err(dev, "couldn't reserve region0\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
if (!devm_request_region(dev, EC_HOST_CMD_REGION1,
|
||||
EC_HOST_CMD_REGION_SIZE, dev_name(dev))) {
|
||||
dev_err(dev, "couldn't reserve region1\n");
|
||||
return -EBUSY;
|
||||
/* Reserve the remaining I/O ports required by the non-MEC protocol. */
|
||||
if (!devm_request_region(dev, EC_HOST_CMD_REGION0 + EC_HOST_CMD_MEC_REGION_SIZE,
|
||||
EC_HOST_CMD_REGION_SIZE - EC_HOST_CMD_MEC_REGION_SIZE,
|
||||
dev_name(dev))) {
|
||||
dev_err(dev, "couldn't reserve remainder of region0\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
if (!devm_request_region(dev, EC_HOST_CMD_REGION1,
|
||||
EC_HOST_CMD_REGION_SIZE, dev_name(dev))) {
|
||||
dev_err(dev, "couldn't reserve region1\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
}
|
||||
|
||||
ec_dev = devm_kzalloc(dev, sizeof(*ec_dev), GFP_KERNEL);
|
||||
@ -502,6 +517,14 @@ static const struct dmi_system_id cros_ec_lpc_dmi_table[] __initconst = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Glimmer"),
|
||||
},
|
||||
},
|
||||
/* A small number of non-Chromebook/box machines also use the ChromeOS EC */
|
||||
{
|
||||
/* the Framework Laptop */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Framework"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Laptop"),
|
||||
},
|
||||
},
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(dmi, cros_ec_lpc_dmi_table);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user