MINI2440 USB驱动移植问题

本文解决在MINI2440开发板上使用Linux-2.6.32内核时,USB鼠标无法正常工作的问题。通过修改drivers/usb/host/ohci-s3c2410.c文件中的两行代码,可以解决设备描述符读取错误和地址分配失败的问题。修改后,成功识别并配置了USB鼠标。
摘要由CSDN通过智能技术生成

在移植USB鼠标驱动的时候发现了如下问题:

(1)开发板参数:

开发板 : MINI2440

内核: linux - 2.6.32

(2) 插入USB鼠标之后出现如下错误:

# usb 1-1: new low speed USB device using s3c2410-ohci and address 2
usb 1-1: device descriptor read/64, error -62
usb 1-1: device descriptor read/64, error -62
usb 1-1: new low speed USB device using s3c2410-ohci and address 3
usb 1-1: device descriptor read/64, error -62
usb 1-1: device descriptor read/64, error -62
usb 1-1: new low speed USB device using s3c2410-ohci and address 4
usb 1-1: device not accepting address 4, error -62
usb 1-1: new low speed USB device using s3c2410-ohci and address 5
usb 1-1: device not accepting address 5, error -62
hub 1-0:1.0: unable to enumerate USB device on port 1

解决方法:

(1)使用Linux - 2.6.29 内核即可

(2)如果要继续使用Linux - 2.6.32 内核可以做如下修改

        修改drivers/usb/host/ohci-s3c2410.c

#include <linux/platform_device.h>
#include <linux/clk.h>
#include <plat/usb-control.h>

#define valid_port(idx) ((idx) == 1 || (idx) == 2)

#if 1

#include <mach/regs-clock.h>

unsigned long upllvalue = (0x78 << 12)|(0x02 << 4) | (0x03);

#endif

/* clock device associated with the hcd */

static struct clk *clk;
static struct clk *usb_clk;

/* forward definitions */

static void s3c2410_hcd_oc(struct s3c2410_hcd_info *info, int port_oc);

/* conversion functions */

static struct s3c2410_hcd_info *to_s3c2410_info(struct usb_hcd *hcd)
{
        return hcd->self.controller->platform_data;
}

static void s3c2410_start_hc(struct platform_device *dev, struct usb_hcd *hcd)
{
        struct s3c2410_hcd_info *info = dev->dev.platform_data;

        dev_dbg(&dev->dev, "s3c2410_start_hc:\n");

        clk_enable(usb_clk);
        mdelay(2);                      /* let the bus clock stabilise */

        clk_enable(clk);

        if (info != NULL) {
                info->hcd       = hcd;
                info->report_oc = s3c2410_hcd_oc;

                if (info->enable_oc != NULL) {
                        (info->enable_oc)(info, 1);
                }
        }

        while(upllvalue != __raw_readl(S3C2410_UPLLCON))
        {
                __raw_writel(upllvalue ,S3C2410_UPLLCON);
                mdelay(1);
        }

}

加上红色的那两行即可

运行结果

插上USB鼠标后:开发板串口输出如下:

[root@FriendlyARM input]# usb 1-1: new low speed USB device using s3c2410-ohci and address 7
usb 1-1: New USB device found, idVendor=15d9, idProduct=0a4c
usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
usb 1-1: Product:  USB OPTICAL MOUSE
usb 1-1: configuration #1 chosen from 1 choice
usb mouse founded!

拔出:

[root@FriendlyARM input]# usb 1-1: USB disconnect, address 9
usb mouse diconnected!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值