else
ret = tegra_pinconfig_group_set(pctldev, group,
TEGRA_PINCONF_PARAM_TRISTATE, 0);
+
+ if (pmx->soc->is_gpio_reg_support)
+ ret = tegra_pinconfig_group_set(pctldev, group,
+ TEGRA_PINCONF_PARAM_GPIO_MODE, 0);
return ret;
}
const struct tegra_pingroup *g,
enum tegra_pinconf_param param,
bool report_err,
- s8 *bank, s16 *reg, s8 *bit, s8 *width)
+ s8 *bank, s32 *reg, s8 *bit, s8 *width)
{
switch (param) {
case TEGRA_PINCONF_PARAM_PULL:
*bit = g->drvtype_bit;
*width = g->drvtype_width;
break;
+ case TEGRA_PINCONF_PARAM_GPIO_MODE:
+ *bank = g->gpio_bank;
+ *reg = g->gpio_reg;
+ *bit = g->gpio_bit;
+ *width = 1;
+ break;
default:
dev_err(pmx->dev, "Invalid config param %04x\n", param);
return -ENOTSUPP;
const struct tegra_pingroup *g;
int ret;
s8 bank, bit, width;
- s16 reg;
+ s32 reg;
u32 val, mask;
unsigned long flags;
const struct tegra_pingroup *g;
int ret = 0, i;
s8 bank, bit, width;
- s16 reg;
+ s32 reg;
u32 val, mask;
unsigned long flags;
const struct tegra_pingroup *g;
int i, ret;
s8 bank, bit, width;
- s16 reg;
+ s32 reg;
u32 val;
int function;
const char *name;
const unsigned *pins;
unsigned npins;
unsigned funcs[4];
- s16 mux_reg;
- s16 pupd_reg;
- s16 tri_reg;
- s16 einput_reg;
- s16 odrain_reg;
- s16 lock_reg;
- s16 parked_reg;
- s16 ioreset_reg;
- s16 rcv_sel_reg;
- s16 e_io_hv_reg;
- s16 hsm_reg;
- s16 schmitt_reg;
- s16 drv_reg;
- s16 drvtype_reg;
+ s32 mux_reg;
+ s32 pupd_reg;
+ s32 tri_reg;
+ s32 einput_reg;
+ s32 odrain_reg;
+ s32 lock_reg;
+ s32 parked_reg;
+ s32 ioreset_reg;
+ s32 rcv_sel_reg;
+ s32 e_io_hv_reg;
+ s32 hsm_reg;
+ s32 schmitt_reg;
+ s32 drv_reg;
+ s32 drvtype_reg;
+ s32 gpio_reg;
int mux_bank;
int pupd_bank;
int tri_bank;
int parked_bank;
int drv_bank;
int drvtype_bank;
+ int gpio_bank;
int mux_bit;
int pupd_bit;
int tri_bit;
int drvup_bit;
int slwr_bit;
int slwf_bit;
+ int gpio_bit;
int drvtype_bit;
int drvdn_width;
int drvup_width;
int slwr_width;
int slwf_width;
int drvtype_width;
+ int gpio_width;
};
/**
* @nfunctions: The numbmer of entries in @functions.
* @groups: An array describing all pin groups the pin SoC supports.
* @ngroups: The numbmer of entries in @groups.
+ * @is_gpio_reg_support: GPIO/SFIO selection support in pinmux register.
* @config_data: List of configuration data which is SoC specific.
* @nconfig_data: Number of config data.
*/
unsigned nfunctions;
const struct tegra_pingroup *groups;
unsigned ngroups;
+ bool is_gpio_reg_support;
int (*suspend)(u32 *pg_data);
void (*resume)(u32 *pg_data);
int (*gpio_request_enable)(unsigned pin);
TEGRA_PINCONF_PARAM_SLEW_RATE_RISING,
/* argument: Integer, range is HW-dependant */
TEGRA_PINCONF_PARAM_DRIVE_TYPE,
+ /* Set pin to GPIO mode */
+ TEGRA_PINCONF_PARAM_GPIO_MODE,
};
/*