ddata->psy_desc.name = dev_name(ddata->dev);想要获取"bbc"为电源供应器对象,以下代码要如何改写: 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; }
时间: 2024-03-30 09:35:16 浏览: 129
你可以将以下代码替换原来的 power_supply_get_by_name("bbc"):
```
struct device *dev;
struct power_supply *psy;
dev = class_find_device(power_supply_class, NULL, "bbc", NULL);
if (!dev) {
pr_info("Failed to find power supply device: bbc\n");
return -1;
}
psy = dev_get_drvdata(dev);
if (!psy) {
pr_info("Failed to get power supply for device: bbc\n");
return -1;
}
```
这里使用了 class_find_device 函数来查找名称为 "bbc" 的电源供应器对象,并通过 dev_get_drvdata 函数获取对应的 power_supply 结构体。注意,需要包含头文件 #include <linux/device.h>。
相关问题
case PORT_STAT_UNKNOWN_TA: #if IS_ENABLED(CONFIG_CPS_WLS_CHARGER) if(ddata->psy_desc.type == POWER_SUPPLY_TYPE_WIRELESS) break; #endif ddata->psy_desc.type = POWER_SUPPLY_TYPE_USB; ddata->psy_usb_type = POWER_SUPPLY_USB_TYPE_DCP; break;请详细分析一下这段代码
这段代码是一个 switch-case 语句块,其中 case PORT_STAT_UNKNOWN_TA 是一个常量,表示电源供应状态未知的情况。代码块中首先判断了一个名为 CONFIG_CPS_WLS_CHARGER 的宏是否被定义,如果被定义,则执行下面的 if 语句。
在 if 语句中,判断了一个名为 ddata->psy_desc.type 的变量是否等于 POWER_SUPPLY_TYPE_WIRELESS,如果等于,则直接跳出 switch-case 块,不再执行后面的代码,因为无线充电类型的电源供应情况需要特殊处理。
如果 ddata->psy_desc.type 不等于 POWER_SUPPLY_TYPE_WIRELESS,则执行后面的代码块。其中,ddata->psy_desc.type 被赋值为 POWER_SUPPLY_TYPE_USB,表示电源供应类型为 USB 类型。ddata->psy_usb_type 被赋值为 POWER_SUPPLY_USB_TYPE_DCP,表示 USB 类型的电源供应支持 DCP 快充协议。
总的来说,这段代码的作用是根据电源供应状态来设置电源类型和支持的快充协议类型。如果是无线充电类型的电源供应,则不做任何处理,否则设置为 USB 类型并支持 DCP 快充协议。
case POWER_SUPPLY_PROP_ONLINE: val->intval = atomic_read(&ddata->attach); if(!val->intval || (ddata->psy_desc.type == POWER_SUPPLY_TYPE_USB && ddata->psy_usb_type == POWER_SUPPLY_USB_TYPE_UNKNOWN)) val->intval = 0; break;请详细分析一下这段代码
这段代码是用于获取电池供电状态(online状态)的属性值。该属性值的类型为整数(intval),表示电池是否连接并充电。
具体来说,该代码首先通过读取设备数据结构中的attach属性(类型为atomic_t)获取电池连接状态,将其转换为整数类型并存储到val->intval变量中。如果attach属性的值为0,表示电池未连接或未充电,因此将val->intval设置为0。
然后,如果设备的电池类型为USB并且USB类型未知(POWER_SUPPLY_USB_TYPE_UNKNOWN),则将val->intval设置为0。这是因为在这种情况下,电池可能未充电或未连接,因此不能依赖attach属性的值。
最后,根据上述步骤获取到的val->intval值,即可获取到设备的电池供电状态属性值。
阅读全文