Platform Data 是通过一个 C 结构体来将平台特定的配置信息(寄存器的地址,总线速度等)传递给驱动程序,相关定义位于./include/dm/platdata.h文件中。在 DM 初始化后(实际是在 probe 后),设备信息最终被存放到udevice ->plat_指向的内存中,驱动可以随时通过dev->plat_访问他们的数据。官方指出,除非有必要...
int (*pre_unbind)(struct udevice *dev); int (*pre_probe)(struct udevice *dev); int (*post_probe)(struct udevice *dev); int (*pre_remove)(struct udevice *dev); int (*child_post_bind)(struct udevice *dev); int (*child_pre_probe)(struct udevice *dev); int (*child_post_pro...
* @probe: Called to probe a device, i.e. activate it * @remove: Called to remove a device, i.e. de-activate it * @unbind: Called to unbind a device from its driver * @of_to_plat: Called before probe to decode device tree data * @child_post_bind: Called after a new child ha...
* @pre_probe: Called before a new device is probed * @post_probe: Called after a new device is probed * @pre_remove: Called before a device is removed * @child_post_bind: Called after a child is bound to a device in this uclass * @child_pre_probe: Called before a child in this...
DM 是 U-Boot 中的驱动框架,全称 Driver Mode。像 Linux Kernel 中的驱动三要素 device 、bus 、driver ⼀样,DM 也有⾃⼰的三要素:udevice、uclass、driver。udevice 描述具体的某⼀个硬件设备。driver 是与这个设备匹配的驱动。uclass 是同⼀类设备的抽象,提供管理同⼀类设备的抽象接⼝。udevice...
2)提供probe(owl_pinctrl_probe)接口,以便获取pinctrl device的寄存器基地址,并保存在priv_auto_alloc_size 中(struct owl_pinctrl_priv)。 3)pinctrl uclass要求实现对应的struct pinctrl_ops结构,我们只实现其中最简单的一个---set_state_simple: static const struct pinctrl_ops owl_pinctrl_ops = { ....
uboot uclass和uclass_driver,structuclass{ void*priv; structuclass_driver*uc_drv; structlist_headdev_head; structlist_headsibling_node;};structuclass_driver{ constchar*name;
static int qcom_snps_eusb2_phy_probe(struct udevice *dev) { struct qcom_snps_eusb2_phy_priv *qcom_snps_eusb2 = dev_get_priv(dev); int ret;qcom_snps_eusb2->base = (void __iomem *)dev_read_addr(dev);if (IS_ERR(qcom_snps_eusb2->base))...
int syscon_reset_probe(struct udevice *dev) { struct syscon_reset_priv *priv = dev_get_priv(dev); priv->regmap = syscon_regmap_lookup_by_phandle(dev, "regmap"); if (IS_ERR(priv->regmap)) return -ENODEV; priv->offset = dev_read_u32_default(dev, "offset", 0); priv->mask = ...
18 @@ static int simple_panel_probe(struct udevice *dev) return 0; } +static int simple_panel_get_display_timing(struct udevice *dev, + struct display_timing *timings) +{ + memcpy(timings, &boe_ev121wxm_n10_1850_timing, sizeof(*timings)); + + return 0; +} static const struct ...