static void __exit
imx278_exit_module(void)
{
    rpmsg_sensor_unregister((void *)&s_imx278);
    hwsensor_unregister(&s_imx278.intf);
    platform_driver_unregister(&s_imx278_driver);
}
static int32_t
imx278_platform_probe(
        struct platform_device* pdev)
{
    if (NULL == pdev){
        cam_err("%s pdev is null.\n", __func__);
        return -1;
    }
	int rc = 0;
	cam_notice("enter %s",__func__);
	if (pdev->dev.of_node) {
		rc = hw_sensor_get_dt_data(pdev, &s_imx278);
		if (rc < 0) {
			cam_err("%s failed line %d\n", __func__, __LINE__);
			goto imx278_sensor_probe_fail;
		}
	} else {
		cam_err("%s imx278 of_node is NULL.\n", __func__);
		goto imx278_sensor_probe_fail;
	}

    s_imx278.dev = &pdev->dev;

	rc = hwsensor_register(pdev, &s_imx278.intf);
    if (0 != rc){
        cam_err("%s hwsensor_register fail.\n", __func__);
        goto imx278_sensor_probe_fail;
    }
	rc = rpmsg_sensor_register(pdev, (void *)&s_imx278);
    if (0 != rc){
        cam_err("%s rpmsg_sensor_register fail.\n", __func__);
        hwsensor_unregister(&s_imx278.intf);
        goto imx278_sensor_probe_fail;
    }

imx278_sensor_probe_fail:
	return rc;
}
static void __exit
    imx278_carrera_exit_module(void)
{
    hwsensor_unregister(&s_imx278_carrera.intf);
    platform_driver_unregister(&s_imx278_carrera_driver);
}
static void __exit
imx328_exit_module(void)
{
    hwsensor_unregister(&s_imx328.intf);
    platform_driver_unregister(&s_imx328_driver);
}
static void __exit
ov13850_exit_module(void)
{
    hwsensor_unregister(&s_ov13850.intf);
    platform_driver_unregister(&s_ov13850_driver);
}
static void __exit
ar1335_exit_module(void)
{
    hwsensor_unregister(&s_ar1335.intf);
    platform_driver_unregister(&s_ar1335_driver);
}