- 论坛徽章:
- 0
|
- static int __devinit ks8851_probe(struct platform_device *pdev)
- {
- int err = -ENOMEM;
- struct resource *io_d, *io_c;
- struct net_device *netdev;
- struct ks_net *ks;
- u16 id, data;
- io_d = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- io_c = platform_get_resource(pdev, IORESOURCE_MEM, 1);
- if (!request_mem_region(io_d->start, resource_size(io_d), DRV_NAME))
- goto err_mem_region;
- if (!request_mem_region(io_c->start, resource_size(io_c), DRV_NAME))
- goto err_mem_region1;
- netdev = alloc_etherdev(sizeof(struct ks_net));
- if (!netdev)
- goto err_alloc_etherdev;
- SET_NETDEV_DEV(netdev, &pdev->dev);
- ks = netdev_priv(netdev);
- ks->netdev = netdev;
- ks->hw_addr = ioremap(io_d->start, resource_size(io_d));
- if (!ks->hw_addr)
- goto err_ioremap;
- ks->hw_addr_cmd = ioremap(io_c->start, resource_size(io_c));
- if (!ks->hw_addr_cmd)
- goto err_ioremap1;
- ks->irq = platform_get_irq(pdev, 0);
- if (ks->irq < 0) {
- err = ks->irq;
- goto err_get_irq;
- }
- ks->pdev = pdev;
- mutex_init(&ks->lock);
- spin_lock_init(&ks->statelock);
- netdev->netdev_ops = &ks_netdev_ops;
- netdev->ethtool_ops = &ks_ethtool_ops;
- /* setup mii state */
- ks->mii.dev = netdev;
- ks->mii.phy_id = 1,
- ks->mii.phy_id_mask = 1;
- ks->mii.reg_num_mask = 0xf;
- ks->mii.mdio_read = ks_phy_read;
- ks->mii.mdio_write = ks_phy_write;
- ks_info(ks, "message enable is %d\n", msg_enable);
- /* set the default message enable */
- ks->msg_enable = netif_msg_init(msg_enable, (NETIF_MSG_DRV |
- NETIF_MSG_PROBE |
- NETIF_MSG_LINK));
- ks_read_config(ks);
- /* simple check for a valid chip being connected to the bus */
- if ((ks_rdreg16(ks, KS_CIDER) & ~CIDER_REV_MASK) != CIDER_ID) {
- ks_err(ks, "failed to read device ID\n");
- err = -ENODEV;
- goto err_register;
- }
- if (ks_read_selftest(ks)) {
- ks_err(ks, "failed to read device ID\n");
- err = -ENODEV;
- goto err_register;
- }
- err = register_netdev(netdev);
- if (err)
- goto err_register;
- platform_set_drvdata(pdev, netdev);
- ks_soft_reset(ks, GRR_GSR);
- ks_hw_init(ks);
- ks_disable_qmu(ks);
- ks_setup(ks);
- ks_setup_int(ks);
- memcpy(netdev->dev_addr, ks->mac_addr, 6);
- data = ks_rdreg16(ks, KS_OBCR);
- ks_wrreg16(ks, KS_OBCR, data | OBCR_ODS_16MA);
- /**
- * If you want to use the default MAC addr,
- * comment out the 2 functions below.
- */
- random_ether_addr(netdev->dev_addr);
- ks_set_mac(ks, netdev->dev_addr);
- id = ks_rdreg16(ks, KS_CIDER);
- printk(KERN_INFO DRV_NAME
- " Found chip, family: 0x%x, id: 0x%x, rev: 0x%x\n",
- (id >> 8) & 0xff, (id >> 4) & 0xf, (id >> 1) & 0x7);
- return 0;
- err_register:
- err_get_irq:
- iounmap(ks->hw_addr_cmd);
- err_ioremap1:
- iounmap(ks->hw_addr);
- err_ioremap:
- free_netdev(netdev);
- err_alloc_etherdev:
- release_mem_region(io_c->start, resource_size(io_c));
- err_mem_region1:
- release_mem_region(io_d->start, resource_size(io_d));
- err_mem_region:
- return err;
- }
复制代码 回复 2# snail_314
驱动内核已经有了的。我只是在bsp中注册平台设备。 |
|