psy->changed_work什么意思
时间: 2024-05-27 13:08:12 浏览: 23
`psy->changed_work` 这个语法看起来是一个指针变量 `psy` 中的成员变量 `changed_work`。但是,这个语法的具体含义要看上下文。一般来说,这种语法表示访问结构体或者类中的成员变量,`psy` 是一个结构体或者类的实例,`changed_work` 是一个成员变量的名称。所以,`psy->changed_work` 可能是指 `psy` 实例的 `changed_work` 成员变量被修改了。
相关问题
static int psy_changed(struct notifier_block *nb, unsigned long evt, void ptr) pd->psy_nb.notifier_call = psy_changed; ret = power_supply_reg_notifier(&pd->psy_nb); if (ret) goto del_inst; / *force read initial power_supply values */ psy_changed(&pd->psy_nb, PSY_EVENT_PROP_CHANGED, pd->usb_psy); atomic_notifier_call_chain(&power_supply_notifier, PSY_EVENT_PROP_CHANGED, psy); kobject_uevent(&psy->dev.kobj, KOBJ_CHANGE);代码之间的关系
这段代码中的关系如下:
1. 首先定义了一个名为psy_changed的函数,该函数会在电源供应设备的属性变化时被调用。
2. 在代码中,pd->psy_nb.notifier_call被设置为psy_changed函数,以便在电源供应设备的属性变化时被调用。
3. 接着调用power_supply_reg_notifier函数,将pd->psy_nb注册为电源供应设备的notifier。如果注册失败,则跳转到del_inst标签处。
4. 为了强制读取电源供应设备的初始值,调用psy_changed函数,并传递PSY_EVENT_PROP_CHANGED和pd->usb_psy作为参数。
5. 接下来,调用atomic_notifier_call_chain函数,该函数会依次调用power_supply_notifier链表中的所有notifier,并传递PSY_EVENT_PROP_CHANGED和psy作为参数。
6. 最后,调用kobject_uevent函数,该函数会向用户空间发送一个内核对象的事件通知,通知用户空间有关电源供应设备的属性发生了变化。
if (!val.intval && !pd->pd_connected && typec_mode >= POWER_SUPPLY_TYPEC_SOURCE_DEFAULT) { ret = power_supply_get_property(pd->usb_psy, POWER_SUPPLY_PROP_REAL_TYPE, &val); if (ret) { usbpd_err(&pd->dev, "Unable to read USB TYPE: %d\n", ret); return ret; } if (val.intval == POWER_SUPPLY_TYPE_USB || val.intval == POWER_SUPPLY_TYPE_USB_CDP || val.intval == POWER_SUPPLY_TYPE_USB_FLOAT) { usbpd_dbg(&pd->dev, "typec mode:%d type:%d\n", typec_mode, val.intval); pd->typec_mode = typec_mode; queue_work(pd->wq, &pd->start_periph_work); } return 0; }代码分析
这段代码是一个条件语句,可以将其分为以下几部分进行解释:
1. `!val.intval && !pd->pd_connected && typec_mode >= POWER_SUPPLY_TYPEC_SOURCE_DEFAULT`:这是条件语句的条件部分,表示当`val.intval`和`pd->pd_connected`都为0(即假),并且`typec_mode`大于等于`POWER_SUPPLY_TYPEC_SOURCE_DEFAULT`时,条件成立。
2. `ret = power_supply_get_property(pd->usb_psy, POWER_SUPPLY_PROP_REAL_TYPE, &val);`:如果条件成立,则执行这句代码,读取usb_psy的`POWER_SUPPLY_PROP_REAL_TYPE`属性,并将结果保存在`val`中。
3. `if (ret) {...}`:如果读取属性返回错误,则输出错误信息,并返回错误代码。
4. `if (val.intval == POWER_SUPPLY_TYPE_USB || val.intval == POWER_SUPPLY_TYPE_USB_CDP || val.intval == POWER_SUPPLY_TYPE_USB_FLOAT)`:如果`val.intval`等于`POWER_SUPPLY_TYPE_USB`、`POWER_SUPPLY_TYPE_USB_CDP`或`POWER_SUPPLY_TYPE_USB_FLOAT`中的任意一个,则执行下一步操作。
5. `pd->typec_mode = typec_mode;`:将`typec_mode`的值赋给`pd->typec_mode`。
6. `queue_work(pd->wq, &pd->start_periph_work);`:将`pd->start_periph_work`添加到`pd->wq`工作队列中,等待执行。
7. `return 0;`:返回0表示执行成功。
总的来说,这段代码的作用是在特定条件下,读取`usb_psy`的`POWER_SUPPLY_PROP_REAL_TYPE`属性,并将其值与`POWER_SUPPLY_TYPE_USB`、`POWER_SUPPLY_TYPE_USB_CDP`和`POWER_SUPPLY_TYPE_USB_FLOAT`中的任意一个进行比较,如果匹配成功则将`typec_mode`的值赋给`pd->typec_mode`,并将`pd->start_periph_work`添加到工作队列中等待执行。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)