static int __init cyttsp4_debug_init(void)
{
	int rc = 0;
	int i, j;

	/* Check for invalid or duplicate core_ids */
	for (i = 0; i < num_core_ids; i++) {
		if (!strlen(core_ids[i])) {
			pr_err("%s: core_id %d is empty\n",
				__func__, i+1);
			return -EINVAL;
		}
		for (j = i+1; j < num_core_ids; j++)
			if (!strcmp(core_ids[i], core_ids[j])) {
				pr_err("%s: core_ids %d and %d are same\n",
					__func__, i+1, j+1);
				return -EINVAL;
			}
	}

	for (i = 0; i < num_core_ids; i++) {
		cyttsp4_debug_infos[i].name = cyttsp4_debug_name;
		cyttsp4_debug_infos[i].core_id = core_ids[i];
		cyttsp4_debug_infos[i].platform_data =
			&_cyttsp4_debug_platform_data;
		pr_info("%s: Registering debug device for core_id: %s\n",
			__func__, cyttsp4_debug_infos[i].core_id);
		rc = cyttsp4_register_device(&cyttsp4_debug_infos[i]);
		if (rc < 0) {
			pr_err("%s: Error, failed registering device\n",
				__func__);
			goto fail_unregister_devices;
		}
	}
	rc = cyttsp4_register_driver(&cyttsp4_debug_driver);
	if (rc) {
		pr_err("%s: Error, failed registering driver\n", __func__);
		goto fail_unregister_devices;
	}

	pr_info("%s: Cypress TTSP Debug (Built %s) rc=%d\n",
		 __func__, CY_DRIVER_DATE, rc);
	return 0;

fail_unregister_devices:
	for (i--; i <= 0; i--) {
		cyttsp4_unregister_device(cyttsp4_debug_infos[i].name,
			cyttsp4_debug_infos[i].core_id);
		pr_info("%s: Unregistering device access device for core_id: %s\n",
			__func__, cyttsp4_debug_infos[i].core_id);
	}
	return rc;
}
static void __exit cyttsp4_debug_exit(void)
{
	int i;

	cyttsp4_unregister_driver(&cyttsp4_debug_driver);
	for (i = 0; i < num_core_ids; i++) {
		cyttsp4_unregister_device(cyttsp4_debug_infos[i].name,
			cyttsp4_debug_infos[i].core_id);
		pr_info("%s: Unregistering debug device for core_id: %s\n",
			__func__, cyttsp4_debug_infos[i].core_id);
	}
	pr_info("%s: module exit\n", __func__);
}
static int __init cyttsp4_debug_init(void)
{
	int rc1;
	int rc2;

	rc1 = cyttsp4_register_device(&cyttsp4_debug_device);
	if (rc1)
		return -ENODEV;

	rc2 = cyttsp4_register_driver(&cyttsp4_debug_driver);
	if (rc2) {
		cyttsp4_unregister_device(&cyttsp4_debug_device);
		return -ENODEV;
	}

	pr_info("%s: %s (Built %s @ %s),rc1=%d rc2=%d\n", __func__,
			"Cypress TTSP Debug", __DATE__, __TIME__,
			rc1, rc2);
	return 0;
}
static void __exit cyttsp4_debug_exit(void)
{
	cyttsp4_unregister_device(&cyttsp4_debug_device);
	cyttsp4_unregister_driver(&cyttsp4_debug_driver);
	pr_info("%s: module exit\n", __func__);
}