2024年6月12日发(作者:)

if (!pdata) {

dev_err(&pdev->dev, "No platform datan");

goto exit;

}

/* allocate the d_can device */

/*分配d_can设备,如can0、can1、…等*/

ndev = alloc_d_can_dev(pdata->num_of_msg_objs);

if (!ndev) {

ret = -ENOMEM;

dev_err(&pdev->dev, "alloc_d_can_dev failedn");

goto exit;

}

/*获取设备私有数据*/

priv = netdev_priv(ndev);

/*获取时钟并使能*/

priv->fck = clk_get(&pdev->dev, pdata->fck_name);

if (IS_ERR(priv->fck)) {

dev_err(&pdev->dev, "%s is not foundn", pdata->fck_name);

ret = -ENODEV;

goto exit_free_ndev;

}

clk_enable(priv->fck);

/*获取时钟并使能*/

priv->ick = clk_get(&pdev->dev, pdata->ick_name);

if (IS_ERR(priv->ick)) {

dev_err(&pdev->dev, "%s is not foundn", pdata->ick_name);

ret = -ENODEV;

goto exit_free_fck;

}

clk_enable(priv->ick);

/* get the platform data */

/*获取平台内存资源*/

mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);

if (!mem) {

ret = -ENODEV;

dev_err(&pdev->dev, "No mem resourcen");

goto exit_free_clks;