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; }代码分析
时间: 2024-04-21 20:27:57 浏览: 203
这段代码是一个条件语句,可以将其分为以下几部分进行解释:
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`添加到工作队列中等待执行。
阅读全文