static int set_charger_type(void) { int ret; union power_supply_propval val; struct power_supply *psy = power_supply_get_by_name("bbc"); if (psy == NULL) { pr_info("power_supply_get_by_name error.\n"); return -1; } val.intval = chr_type_en; pr_info("set_charger_type: %d.\n", val.intval); ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_ONLINE, &val); if(val.intval) { val.intval = POWER_SUPPLY_TYPE_WIRELESS; ret = power_supply_set_property(psy,POWER_SUPPLY_PROP_TYPE, &val); if (!ret) { pr_info("POWER_SUPPLY_TYPE: %d.\n", val.intval); return val.intval; } else { return 0; } } return 0; } static int mt6375_chg_init_psy(struct mt6375_chg_data *ddata) { struct power_supply_config cfg = { .drv_data = ddata, .of_node = ddata->dev->of_node, .supplied_to = mt6375_psy_supplied_to, .num_supplicants = ARRAY_SIZE(mt6375_psy_supplied_to), }; mt_dbg(ddata->dev, "%s\n", __func__); memcpy(&ddata->psy_desc, &mt6375_psy_desc, sizeof(ddata->psy_desc)); ddata->psy_desc.name = "bbc"; ddata->psy = devm_power_supply_register(ddata->dev, &ddata->psy_desc, &cfg); return IS_ERR(ddata->psy) ? PTR_ERR(ddata->psy) : 0; } 请详细分析这两段函数之间的关系
时间: 2024-02-14 20:19:35 浏览: 36
这两段函数之间没有直接的调用关系。第一个函数`set_charger_type`用于设置充电器的类型,它使用了一个名为"bbc"的电源供应(power supply)设备,通过调用`power_supply_get_by_name`函数获取该设备的指针。然后,它将充电器类型的值写入该设备的属性`POWER_SUPPLY_PROP_ONLINE`中,即调用`power_supply_set_property`函数。如果充电器类型不为0(即充电器已连接),则还会将充电器类型写入该设备的属性`POWER_SUPPLY_PROP_TYPE`中,同样是通过调用`power_supply_set_property`函数。
第二个函数`mt6375_chg_init_psy`用于初始化电源供应设备,它首先将一个名为"bbc"的电源供应设备的描述信息复制到`ddata->psy_desc`中,然后将该设备的名称设置为"bbc"。接下来,它调用`devm_power_supply_register`函数来注册该设备,并将该设备的配置信息传递给该函数。这个配置信息包括设备的驱动程序数据、设备节点(of_node)、该设备供应的设备列表(supplied_to)和该设备供应的设备数量(num_supplicants)。
因此,这两个函数之间的关系是,第二个函数`mt6375_chg_init_psy`用于初始化一个名为"bbc"的电源供应设备,并将该设备注册到系统中,而第一个函数`set_charger_type`则使用该设备来设置充电器的类型。
相关问题
请用power_supply_get_by_name(ddata->dev)的方法对以下函数进行改写:static int set_charger_type(void) { int ret; static int old_type_en = 0; union power_supply_propval val; struct power_supply *psy = power_supply_get_by_name("bbc"); if (psy == NULL) { pr_info("power_supply_get_by_name error.\n"); return -1; } val.intval = chr_type_en; pr_info("set_charger_type: %d.\n", val.intval); if (val.intval) { if (!old_type_en) { ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_ONLINE, &val); old_type_en = 1; } power_supply_changed(psy); val.intval = POWER_SUPPLY_TYPE_WIRELESS; ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val); if (!ret) { return val.intval; } else { return 0; } } else { val.intval = POWER_SUPPLY_TYPE_USB; ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val); if (ret < 0) pr_info("set chg psy failed\n"); power_supply_changed(psy); old_type_en = 0; } return 0; }
static int set_charger_type(void) {
int ret;
static int old_type_en = 0;
union power_supply_propval val;
struct power_supply *psy = power_supply_get_by_name("bbc");
if (!psy) {
pr_info("power_supply_get_by_name error.\n");
return -1;
}
val.intval = chr_type_en;
pr_info("set_charger_type: %d.\n", val.intval);
if (val.intval) {
if (!old_type_en) {
ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_ONLINE, &val);
old_type_en = 1;
}
power_supply_changed(psy);
val.intval = POWER_SUPPLY_TYPE_WIRELESS;
ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val);
if (ret < 0) {
pr_info("set chg psy failed\n");
return 0;
}
return val.intval;
} else {
val.intval = POWER_SUPPLY_TYPE_USB;
ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val);
if (ret < 0) {
pr_info("set chg psy failed\n");
}
power_supply_changed(psy);
old_type_en = 0;
}
return 0;
}
static int set_charger_type(void) { int ret; static int old_type_en = 0; union power_supply_propval val; struct power_supply *psy = power_supply_get_by_name("bbc"); if (psy == NULL) { pr_info("power_supply_get_by_name error.\n"); return -1; } val.intval = chr_type_en; pr_info("set_charger_type: %d.\n", val.intval); if (val.intval) { if (!old_type_en) { ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_ONLINE, &val); old_type_en = 1; } power_supply_changed(psy); val.intval = POWER_SUPPLY_TYPE_WIRELESS; ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val); if (!ret) { return val.intval; } else { return 0; } } else { val.intval = POWER_SUPPLY_TYPE_USB; ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val); if (ret < 0) pr_info("set chg psy failed\n"); power_supply_changed(psy); old_type_en = 0; } return 0; }将这段函数进行改写,使用dev_name(ddata->dev)来动态获取设备名称
static int set_charger_type(struct device *dev) {
int ret;
static int old_type_en = 0;
union power_supply_propval val;
struct power_supply *psy = power_supply_get_by_name(dev_name(dev));
if (psy == NULL) {
pr_info("power_supply_get_by_name error.\n");
return -1;
}
val.intval = chr_type_en;
pr_info("set_charger_type: %d.\n", val.intval);
if (val.intval) {
if (!old_type_en) {
ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_ONLINE, &val);
old_type_en = 1;
}
power_supply_changed(psy);
val.intval = POWER_SUPPLY_TYPE_WIRELESS;
ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val);
if (!ret) {
return val.intval;
} else {
return 0;
}
} else {
val.intval = POWER_SUPPLY_TYPE_USB;
ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val);
if (ret < 0)
pr_info("set chg psy failed\n");
power_supply_changed(psy);
old_type_en = 0;
}
return 0;
}
相关推荐
![](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)