Hi Marek, thanks for your patch! In general this patch is pretty much how I imagine I would have solved it myself. It's a really fringe situation but STM32 is pushing the envelope with this block so here we are. The pinmux core is definitely designed to handle stuff like this and I'm happy that it seems to work for you. On Tue, Jan 5, 2021 at 3:08 PM Marek Vasut <marex@xxxxxxx> wrote: > NOTE: I would prefer this solution over having a custom DT per SoM, > since it reduces the amount of DT combinations. I don't see any problem with this approach. > &sdmmc1 { > - pinctrl-names = "default", "opendrain", "sleep"; > + pinctrl-names = "default", "opendrain", "sleep", "init"; > pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_dir_pins_a>; > pinctrl-1 = <&sdmmc1_b4_od_pins_a &sdmmc1_dir_pins_a>; > pinctrl-2 = <&sdmmc1_b4_sleep_pins_a &sdmmc1_dir_sleep_pins_a>; > + pinctrl-3 = <&sdmmc1_b4_init_pins_a &sdmmc1_dir_init_pins_a>; > cd-gpios = <&gpiog 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; > disable-wp; > st,sig-dir; > st,neg-edge; > + st,use-ckin; > + st,cmd-gpios = <&gpiod 2 0>; > + st,ck-gpios = <&gpioc 12 0>; > + st,ckin-gpios = <&gpioe 4 0>; Fair enough, when submitting the final device tree, add som verbose comments as to what is going on here so people get it. I got reminded that the MMCI bindings are not converted to device tree so I spent some time on that. I will send out an RFC. > +static void mmci_probe_level_translator(struct mmc_host *mmc) This probing function looks good. > if (of_get_property(np, "st,use-ckin", NULL)) > - host->clk_reg_add |= MCI_STM32_CLK_SELCKIN; > + mmci_probe_level_translator(mmc); This activates the probing based on solely the existance of this device tree flag. It's not a problem in this patch but we should probably only look for some of these attributes if we determine that it's an STM32 platform block. Yours, Linus Walleij