qcom SDM660平台外接aw35615CSR芯片驱动怎么兼容SDM660平台本身的usb phy
时间: 2024-03-13 08:46:28 浏览: 152
在SDM660平台上同时兼容外接的AW35615CSR芯片和内置的USB PHY,你需要对SDM660平台的USB PHY驱动程序进行修改,以便同时支持两种PHY。具体的修改步骤如下:
1. 在SDM660平台上加载AW35615CSR芯片的驱动程序,并确保AW35615CSR芯片已经被成功识别。
2. 在SDM660平台上加载USB PHY驱动程序,并确保内置的USB PHY已经被成功识别。
3. 在USB PHY驱动程序中添加对AW35615CSR芯片的支持。具体来说,你需要修改驱动程序中的probe函数,以便在检测到AW35615CSR芯片时将其作为备选PHY,并在AW35615CSR芯片不可用时使用内置的USB PHY。具体代码实现可能因驱动程序而异,以下是一个简单的示例:
```c
static int usb_phy_probe(struct platform_device *pdev)
{
struct usb_phy *phy;
struct device *dev = &pdev->dev;
int ret;
phy = devm_kzalloc(dev, sizeof(*phy), GFP_KERNEL);
if (!phy)
return -ENOMEM;
// 检测AW35615CSR芯片是否可用
if (aw35615csr_detect())
phy->type = USB_PHY_TYPE_EXTERNAL;
else
phy->type = USB_PHY_TYPE_INTERNAL;
// 初始化PHY
switch (phy->type) {
case USB_PHY_TYPE_EXTERNAL:
// 初始化外部PHY
ret = aw35615csr_phy_init();
if (ret) {
dev_err(dev, "failed to initialize external PHY\n");
return ret;
}
break;
case USB_PHY_TYPE_INTERNAL:
// 初始化内部PHY
ret = msm_usb_phy_init();
if (ret) {
dev_err(dev, "failed to initialize internal PHY\n");
return ret;
}
break;
default:
dev_err(dev, "unsupported PHY type\n");
return -EINVAL;
}
// 注册PHY
phy_set_drvdata(phy, dev);
ret = usb_add_phy_dev(dev, phy);
if (ret) {
dev_err(dev, "failed to register PHY\n");
goto err_phy_exit;
}
return 0;
err_phy_exit:
switch (phy->type) {
case USB_PHY_TYPE_EXTERNAL:
aw35615csr_phy_exit();
break;
case USB_PHY_TYPE_INTERNAL:
msm_usb_phy_exit();
break;
}
return ret;
}
```
在这个示例代码中,我们在probe函数中使用aw35615csr_detect函数来检测AW35615CSR芯片是否可用,如果可用,就将其作为备选PHY,并在初始化PHY时使用aw35615csr_phy_init函数初始化AW35615CSR芯片的PHY。如果AW35615CSR芯片不可用,则使用内置的USB PHY,并在初始化PHY时使用msm_usb_phy_init函数初始化内置的USB PHY。
4. 编译和安装修改后的USB PHY驱动程序,并重新启动SDM660平台。在重新启动后,SDM660平台应该可以同时支持内置的USB PHY和外接的AW35615CSR芯片了。
阅读全文