コード例 #1
0
static int vrtc_mrst_rpmsg_probe(struct rpmsg_channel *rpdev)
{
	int ret;

	if (rpdev == NULL) {
		pr_err("vrtc_mrst rpmsg channel not created\n");
		ret = -ENODEV;
		goto out;
	}

	dev_info(&rpdev->dev, "Probed vrtc_mrst rpmsg device\n");

	/* Allocate rpmsg instance for fw_update*/
	ret = alloc_rpmsg_instance(rpdev, &vrtc_mrst_instance);
	if (!vrtc_mrst_instance) {
		dev_err(&rpdev->dev, "kzalloc vrtc_mrst instance failed\n");
		goto out;
	}

	/* Initialize rpmsg instance */
	init_rpmsg_instance(vrtc_mrst_instance);

	ret = vrtc_mrst_init();
	if (ret)
		free_rpmsg_instance(rpdev, &vrtc_mrst_instance);

out:
	return ret;
}
コード例 #2
0
static int mip_rpmsg_probe(struct rpmsg_channel *rpdev)
{
	int ret = 0;

	if (rpdev == NULL) {
		pr_err("rpmsg channel not created\n");
		ret = -ENODEV;
		goto out;
	}

	dev_info(&rpdev->dev, "Probed mip rpmsg device\n");

	/* Allocate rpmsg instance for mip*/
	ret = alloc_rpmsg_instance(rpdev, &mip_instance);
	if (!mip_instance) {
		dev_err(&rpdev->dev, "kzalloc mip instance failed\n");
		goto out;
	}
	/* Initialize rpmsg instance */
	init_rpmsg_instance(mip_instance);

	/* Init mip base */
	intel_mip_base = ioremap_nocache(IPC_MIP_BASE, IPC_MIP_MAX_ADDR);
	if (!intel_mip_base) {
		ret = -ENOMEM;
		goto rpmsg_err;
	}

	/* Create debugfs for mip regs */
	scu_mip_kobj = kobject_create_and_add(mip_attr_group.name,
						kernel_kobj);

	if (!scu_mip_kobj) {
		ret = -ENOMEM;
		goto mip_base_err;
	}

	ret = sysfs_create_group(scu_mip_kobj, &mip_attr_group);

	if (ret) {
		kobject_put(scu_mip_kobj);
		goto mip_base_err;
	}

	ret = scu_mip_init();
	goto out;
mip_base_err:
	iounmap(intel_mip_base);
rpmsg_err:
	free_rpmsg_instance(rpdev, &mip_instance);
out:
	return ret;
}
コード例 #3
0
static int rpmsg_ipc_probe(struct rpmsg_channel *rpdev)
{
	int ret = 0;
	int i;
	struct rpmsg_device_data *ddata = rpmsg_ddata;

	if (rpdev == NULL) {
		pr_err("rpmsg channel %s not created\n", rpdev->id.name);
		ret = -ENODEV;
		goto out;
	}

	dev_info(&rpdev->dev, "Probed rpmsg_ipc device %s\n", rpdev->id.name);

	for (i = RPMSG_IPC_COMMAND; i < RPMSG_IPC_COMMAND_TYPE_NUM; i++) {
		if (!strncmp(rpdev->id.name, ddata[i].name, RPMSG_NAME_SIZE)) {

			/* Allocate rpmsg instance for kernel IPC calls*/
			ret = alloc_rpmsg_instance(rpdev,
					&ddata[i].rpmsg_instance);
			if (!ddata[i].rpmsg_instance) {
				dev_err(&rpdev->dev,
					"alloc rpmsg instance failed\n");
				goto out;
			}

			/* Initialize rpmsg instance */
			init_rpmsg_instance(ddata[i].rpmsg_instance);

			ddata[i].rpdev = rpdev;
			break;
		}
	}

out:
	return ret;
}