示例#1
0
/* calculate host port id */
static void host_port_id_target(struct kobject *kobj, u8 *port)
{
    u8 i;

    for(i=0;i<ARRAY_SIZE(rmcr_port_kobj);i++){
        if(kobj == rmcr_port_kobj[i]){
            *port = rmcr_port[i];
            DRAM_DBG("rmcr\n");
            return;
        }
    }

    for(i=0;i<ARRAY_SIZE(mmcr_port_kobj);i++){
        if(kobj == mmcr_port_kobj[i]){
            *port = mmcr_port[i];
            DRAM_DBG("mmcr\n");
            return;
        }
    }

    for(i=0;i<ARRAY_SIZE(mbacr_port_kobj);i++){
        if(kobj == mbacr_port_kobj[i]){
            *port = mbacr_port[i];
            DRAM_DBG("mbacr\n");
            return;
        }
    }
}
static int __init dram_sys_init(void)
{
	dram_class = class_create(THIS_MODULE, "dram");
	if (IS_ERR(dram_class)) {
		DRAM_DBG("%s: couldn't create dram class\n", __FILE__);
		return PTR_ERR(dram_class);
	}
	dram_class->dev_attrs = dram_attrs;

	platform_device_register(&dram_device);
	platform_driver_register(&dram_driver);

	return 0;
}
static int dram_probe(struct platform_device *pdev)
{
	int ret,i;
    char host_port_name[16] = {0};

	device_create(dram_class, &pdev->dev, 0, NULL, "dram.0");

    for (i=0;i<ARRAY_SIZE(host_port);i++) {
        sprintf(host_port_name, "port.%d", host_port[i]);
        port_kobj[i] = kobject_create_and_add(host_port_name, &pdev->dev.kobj);
        if (!port_kobj[i]) {
            ret = -ENOMEM;
            DRAM_DBG("host port: Failed to create dram kobj\n");
            goto out_err1;
        }

        ret = sysfs_create_files(port_kobj[i], host_port_attrs);
        if (ret) {
            DRAM_DBG("host port: Failed to add attrs");
            goto out_err2;
        }
    }

    ret = dram_fetch_sysconfig_para();
    if (ret) {
        DRAM_DBG("fetch dram sysconfig failed\n");
        goto out_err2;
    }
    DRAM_DBG("%s finished!\n", __func__);

	return 0;

out_err2:
    kobject_put(port_kobj[i]);
out_err1:
    return ret;
}