/sys/bus/XXX/devices/ vs /sys/bus/XXX/drivers/

1. 4g-modem-platdata
1.1 在runtime的/sys/bus/platform/drivers里面找到了4g-modem-platdata
1.2 在代码里/kernel/drivers/net/lte/lte_rm310.c找到了

static const struct of_device_id modem_platdata_of_match[] = {
{ .compatible = "4g-modem-platdata" },
{ }
};
在rk3399-evb-ind.dtsi里面找到了

4G-Modem {
compatible="4g-modem-platdata";
pinctrl-names = "default";
pinctrl-0 = <&lte_vbat &lte_power_en &lte_reset>;
4G,vbat-gpio = <&gpio4 RK_PD0 GPIO_ACTIVE_HIGH>;
4G,power-gpio = <&gpio4 RK_PC6 GPIO_ACTIVE_LOW>;
4G,reset-gpio = <&gpio4 RK_PD4 GPIO_ACTIVE_LOW>;
status = "okay";
};

1.3 但是在/sys/bus/platform/devices里面没找到4g-modem-platdata
因为起作用的是/kernel/arch/arm64/boot/dts/rockchip/rk3399-quantum-lp4.dts

2. alarmtimer
同时存在于/sys/bus/XXX/devices/ vs /sys/bus/XXX/drivers/的,并没有在代码中找到相应的compatible
2.1 在"/kernel/kernel/time/alarmtimer.c"里面:
找到了platform_device_register_simple("alarmtimer", -1, NULL, 0); //看起来是这个函数将alarmtimer注册为了一个device
->platform_device_register_full
找到了platform_driver_register(&alarmtimer_driver);                        //看起来这个函数将alarmtimer注册为了一个driver
结论:
也就是说内部驱动,会不涉及dts,被强制添加的

3. backlight
3.1 在/sys/bus/中
在/sys/bus/platform/drivers/中发现了
pwm-backlight
在/sys/bus/platform/devices/中发现了
backlight
backlight-aux-dp
backlight-aux-edp
backlight-dp

3.2 
3.2.1 找到了错误的位置
在"/kernel/drivers/gpu/drm/rockchip/rockchip_drm_backlight.c"发现了

backlight_device_register,注册了
然后发现了驱动名"drm-backlight"

static struct platform_driver rockchip_drm_backlight_driver = {
    .probe = rockchip_drm_backlight_probe,
    .remove = rockchip_drm_backlight_remove,
    .driver = {
           .name = "drm-backlight",
           .of_match_table =
            of_match_ptr(rockchip_drm_backlight_dt_ids),
    },
};

但这些似乎都没有启用
3.2.2 从/sys/bus/platform/devices/倒推
backlight
backlight-aux-dp
backlight-aux-edp
backlight-dp

panel
panel-dp
panel-for-dp-aux
panel-for-edp-aux

去dts中找backlight-aux-edp

backlight_aux_edp: backlight-aux-edp {
        compatible = "edp-aux-backlight";
        power-supply = <&vcc3v3_sys>;
        brightness-levels = <
             16  17  18  19  20  21  22  23
             .................
            248 249 250 251 252 253 254 255>;
        default-brightness-level = <200>;
    };

这个backlight_aux_edp是个属性名,是被引用到了前面的节点的

panel-for-edp-aux {
        status="okay";
        compatible = "simple-panel";
        power-supply = <&dummy>;
        backlight = <&backlight_aux_edp>;
    };

所以这里是device "panel-for-edp-aux"引用了device "backlight-aux-edp"

这里可以找到compatible name=edp-aux-backlight

找到了几个屏设备和背光设备的对应关系:

panel: panel {
        compatible = "simple-panel";
        backlight = <&backlight>;

panel_dp: panel-dp {
        compatible = "simple-panel";
        backlight = <&backlight_dp>;

panel-for-edp-aux {
        compatible = "simple-panel";
        backlight = <&backlight_aux_edp>;

panel-for-dp-aux {
        compatible = "simple-panel";
        backlight = <&backlight_aux_dp>;

backlight_dp: backlight-dp {
        compatible = "pwm-backlight";

backlight_aux_edp: backlight-aux-edp {
        compatible = "edp-aux-backlight";

backlight_aux_dp: backlight-aux-dp {
        compatible = "dp-aux-backlight";

 结论:
设备名在/sys/bus/XXX/devices/ 在/sys/devices/platform/ 在dts中,都可以找到,然后可以找到他们兼容的驱动名,即compatible name.












posted @ 2023-03-29 11:31  hkingsp  阅读(1231)  评论(0编辑  收藏  举报