#define RTD_DRIVE_STRENGH_P (PIN_CONFIG_END + 1)
#define RTD_DRIVE_STRENGH_N (PIN_CONFIG_END + 2)
#define RTD_DUTY_CYCLE (PIN_CONFIG_END + 3)
+#define RTD_HIGH_VIL (PIN_CONFIG_END + 4)
static const struct pinconf_generic_params rtd_custom_bindings[] = {
{"realtek,drive-strength-p", RTD_DRIVE_STRENGH_P, 0},
{"realtek,drive-strength-n", RTD_DRIVE_STRENGH_N, 0},
{"realtek,duty-cycle", RTD_DUTY_CYCLE, 0},
+ {"realtek,high-vil-microvolt", RTD_HIGH_VIL, 0},
};
static int rtd_pinctrl_get_groups_count(struct pinctrl_dev *pcdev)
u16 strength;
u32 val;
u32 mask;
- u32 pulsel_off, pulen_off, smt_off, curr_off, pow_off, reg_off, p_off, n_off;
+ u32 pulsel_off, pulen_off, smt_off, curr_off, pow_off, reg_off, p_off, n_off,
+ input_volt_off, sr_off, hvil_off;
const char *name = data->info->pins[pinnr].name;
int ret = 0;
val = set_val ? mask : 0;
break;
+ case PIN_CONFIG_SLEW_RATE:
+ if (config_desc->slew_rate_offset == NA) {
+ dev_err(data->dev, "Slew rate setting unsupported for pin: %s\n", name);
+ return -ENOTSUPP;
+ }
+
+ switch (arg) {
+ case 1:
+ set_val = 0;
+ break;
+ case 10:
+ set_val = 1;
+ break;
+ case 20:
+ set_val = 2;
+ break;
+ case 30:
+ set_val = 3;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ sr_off = config_desc->base_bit + config_desc->slew_rate_offset;
+ reg_off = config_desc->reg_offset;
+ mask = 0x3 << sr_off;
+ val = arg << sr_off;
+ break;
+
+ case PIN_CONFIG_INPUT_VOLTAGE_UV:
+ if (config_desc->input_volt_offset == NA) {
+ dev_err(data->dev, "Input voltage level setting unsupported for pin:%s\n",
+ name);
+ return -ENOTSUPP;
+ }
+
+ if (arg == 3300000)
+ set_val = 1;
+ else if (arg == 1800000)
+ set_val = 0;
+ else
+ return -EINVAL;
+
+ input_volt_off = config_desc->base_bit + config_desc->input_volt_offset;
+ reg_off = config_desc->reg_offset;
+
+ mask = BIT(input_volt_off);
+ val = set_val ? BIT(input_volt_off) : 0;
+ break;
+
+ case RTD_HIGH_VIL:
+ if (config_desc->hvil_offset == NA) {
+ dev_err(data->dev, "High vil setting unsupported for pin:%s\n", name);
+ return -ENOTSUPP;
+ }
+ hvil_off = config_desc->base_bit + config_desc->hvil_offset;
+ reg_off = config_desc->reg_offset;
+ mask = BIT(hvil_off);
+ val = 1;
+ break;
+
case RTD_DRIVE_STRENGH_P:
sconfig_desc = rtd_pinctrl_find_sconfig(data, pinnr);
if (!sconfig_desc) {