/* 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; }