On 28/11/2023 08:50, Chen-Yu Tsai wrote: > On Tue, Nov 28, 2023 at 3:43 PM Krzysztof Kozlowski > <krzysztof.kozlowski@xxxxxxxxxx> wrote: >> >> On 28/11/2023 01:58, Andre Przywara wrote: >>> >>> +static struct regmap *sun8i_ths_get_syscon_regmap(struct device_node *node) >>> +{ >>> + struct device_node *syscon_node; >>> + struct platform_device *syscon_pdev; >>> + struct regmap *regmap = NULL; >>> + >>> + syscon_node = of_parse_phandle(node, "syscon", 0); >> >> Nope. For the 100th time, this cannot be generic. >> >>> + if (!syscon_node) >>> + return ERR_PTR(-ENODEV); >>> + >>> + syscon_pdev = of_find_device_by_node(syscon_node); >>> + if (!syscon_pdev) { >>> + /* platform device might not be probed yet */ >>> + regmap = ERR_PTR(-EPROBE_DEFER); >>> + goto out_put_node; >>> + } >>> + >>> + /* If no regmap is found then the other device driver is at fault */ >>> + regmap = dev_get_regmap(&syscon_pdev->dev, NULL); >>> + if (!regmap) >>> + regmap = ERR_PTR(-EINVAL); >> >> Aren't you open-coding existing API to get regmap from syscon? > > Not really. This is to get a regmap exported by the device. Syscon's regmap > is not tied to the device at all. I am talking about open-coding existing API. Look at syscon.h. > > With this scheme a device to could export just enough registers for the > consumer to use, instead of the whole address range. > > We do this in the R40 clock controller as well, which has some bits that > tweak the ethernet controllers RGMII delay... Not related. > > > ChenYu Best regards, Krzysztof