fusb302_set_power_mode函数
时间: 2023-06-12 16:07:25 浏览: 50
fusb302_set_power_mode函数是用于设置FUSB302芯片的电源模式的函数。该函数的作用是根据传入的电源模式参数,设置FUSB302芯片的电源控制寄存器的值,从而实现电源模式的切换。
具体实现可以参考以下代码:
```c
int fusb302_set_power_mode(enum fusb302_power_mode power_mode)
{
uint8_t reg;
if (power_mode == FUSB302_POWER_MODE_PD)
reg = FUSB_REG_POWER | FUSB_REG_POWER_PD_EN;
else if (power_mode == FUSB302_POWER_MODE_USB)
reg = FUSB_REG_POWER | FUSB_REG_POWER_VBUSVLDEXT;
else
return -EINVAL;
return fusb302_write(FUSB_REG_POWER, reg);
}
```
在该函数中,首先根据传入的电源模式参数,确定需要设置的电源控制寄存器的值。然后调用fusb302_write函数将该值写入FUSB302芯片的寄存器中。
需要注意的是,该函数的返回值为0表示设置成功,返回值小于0表示设置失败。
相关问题
linux系统fusb302驱动中,tcpm_set_cc函数
在 Linux 系统的 fusb302 驱动中,tcpm_set_cc 函数是用于设置 Type-C 控制器的电流模式(CC 模式)的函数。它的作用是根据传入的参数设置控制器的电流输出模式。具体来说,它会设置控制器的 VCONN 电压输出和 CC1/CC2 端口的电压模式(例如,设置为电压源模式、电流源模式或没有源模式)。
在函数的实现中,它会先检查传入的参数是否有效,然后根据参数设置控制器的电流模式。具体实现过程会涉及到控制器的寄存器操作、I2C 通信等底层操作。
总之,tcpm_set_cc 函数是 fusb302 驱动中的一个重要函数,用于设置 Type-C 控制器的电流输出模式,保证了 Type-C 接口的正常工作。
msm_cdc_set_supplies_lpm_mode函数
`msm_cdc_set_supplies_lpm_mode` 函数是高通平台上用于设置CDC(Communications Device Class)供电低功耗模式的函数。该函数用于控制USB设备的电源管理,以实现低功耗操作。
以下是一个简单的示例:
```c
#include <linux/usb/cdc.h>
void msm_cdc_set_supplies_lpm_mode(struct usb_interface *intf, bool enable)
{
struct usb_cdc_ether_desc *desc;
struct usb_cdc_ether_rndis *rndis;
struct usb_cdc_notification *event;
struct usb_device *dev;
struct usb_driver *driver;
struct usb_host_interface *iface_desc;
int i;
if (!intf)
return;
iface_desc = intf->cur_altsetting;
if (!iface_desc)
return;
dev = interface_to_usbdev(intf);
if (!dev)
return;
driver = dev->driver;
if (!driver)
return;
desc = (struct usb_cdc_ether_desc *)iface_desc->desc;
if (!desc)
return;
rndis = (struct usb_cdc_ether_rndis *)(desc + 1);
if (!rndis)
return;
event = (struct usb_cdc_notification *)(rndis + 1);
if (!event)
return;
for (i = 0; i < iface_desc->desc.bNumEndpoints; i++) {
struct usb_host_endpoint *ep = &iface_desc->endpoint[i];
if (usb_endpoint_is_int_in(ep->desc))
break;
}
if (i >= iface_desc->desc.bNumEndpoints) {
pr_err("msm_cdc_set_supplies_lpm_mode: No interrupt endpoint found\n");
return;
}
if (enable) {
event->bNotificationType = USB_CDC_NOTIFY_NETWORK_CONNECTION;
event->bNotificationCode = USB_CDC_NOTIFY_NETWORK_CONNECTION_RES;
} else {
event->bNotificationType = USB_CDC_NOTIFY_NETWORK_CONNECTION;
event->bNotificationCode = USB_CDC_NOTIFY_NETWORK_CONNECTION_LOS;
}
usb_interrupt_msg(dev, usb_rcvintpipe(dev, ep->desc.bEndpointAddress),
event, sizeof(*event), NULL, 0, 1000);
}
```
上述示例代码中,函数接受一个 `usb_interface` 结构体指针作为参数,以及一个布尔值 `enable`,用来控制是否启用低功耗模式。函数首先获得相关的USB设备和驱动程序,然后根据接口描述符和端点信息进行设置,最后通过USB中断传输发送通知。
需要注意的是,上述代码只是一个简化的示例,并不是完整的实现。实际使用时,还需要根据具体的平台和需求进行适当的调整和扩展。