+static int meson_axg_pinmux_get(struct udevice *dev, unsigned int selector,
+ char *buf, int size)
+{
+ struct meson_pinctrl *priv = dev_get_priv(dev);
+ struct meson_pmx_axg_data *pmx_data;
+ struct meson_pmx_group *group;
+ struct meson_pmx_bank *bank;
+ unsigned int offset;
+ unsigned int func;
+ unsigned int reg;
+ int ret, i, j;
+
+ selector += priv->data->pin_base;
+
+ ret = meson_axg_pmx_get_bank(dev, selector, &bank);
+ if (ret) {
+ snprintf(buf, size, "Unhandled");
+ return 0;
+ }
+
+ meson_axg_pmx_calc_reg_and_offset(bank, selector, ®, &offset);
+
+ func = (readl(priv->reg_mux + (reg << 2)) >> offset) & 0xf;
+
+ for (i = 0; i < priv->data->num_groups; i++) {
+ group = &priv->data->groups[i];
+ pmx_data = (struct meson_pmx_axg_data *)group->data;
+
+ if (pmx_data->func != func)
+ continue;
+
+ for (j = 0; j < group->num_pins; j++) {
+ if (group->pins[j] == selector) {
+ snprintf(buf, size, "%s (%x)",
+ group->name, func);
+ return 0;
+ }
+ }
+ }
+
+ snprintf(buf, size, "Unknown (%x)", func);
+
+ return 0;
+}
+