/* proximity */
static int prox_power_set(unsigned char onoff)
{

#if defined (CONFIG_SENSOR_APDS9190)
	if(onoff == 1)
	{
		rt9396_ldo_enable(NULL,1,1);
		printk(KERN_INFO "%s,***********Proximity probe enter when power on*****\n",__func__);
	} else
	{
		rt9396_ldo_enable(NULL,1,0);
		printk(KERN_INFO "%s,***********Proximity probe enter when power on*****\n",__func__);
	}

#endif
	return 0;
}
static int msm_camera_vreg_config(int vreg_en)
{
	int rc = 0;

#if defined (CONFIG_SENSOR_APDS9190)
	
		if (vreg_en) {
			pr_err("%s: msm_camera_vreg_config power on vreg_en enable\n", __func__);
	
			//IOVDD: 1.8V START
	
			rc = rt9396_ldo_enable(NULL,4,vreg_en); 
			if (rc < 0) {
				pr_err("%s: rt9396_ldo_enable(ldo4) failed\n", __func__);
			}
			//IOVDD: 1.8V END
	
			//AVDD: 2.8V START
	
			rc = rt9396_ldo_enable(NULL,2,vreg_en);
			if (rc < 0) {
				pr_err("%s: rt9396_ldo_enable(ldo2) failed\n", __func__);
			}
			//AVDD: 2.8V END
	
			//DVDD: 1.2V START
	
			rc = rt9396_ldo_enable(NULL,3,vreg_en);
			if (rc < 0) {
				pr_err("%s: rt9396_ldo_enable(ldo3) failed\n", __func__);
			}
			//DVDD: 1.2V END
	
		} 
		else {
			
			pr_err("%s: msm_camera_vreg_config power on vreg_en disable start\n", __func__);
	
			rc = rt9396_ldo_enable(NULL,3,vreg_en);
			if (rc < 0) {
				pr_err("%s: rt9396_ldo_enable(ldo3) OFF failed\n", __func__);
			}
	
			rc = rt9396_ldo_enable(NULL,2,vreg_en);
			if (rc < 0) {
				pr_err("%s: rt9396_ldo_enable(ldo2) OFF failed\n", __func__);
			}
	
			rc = rt9396_ldo_enable(NULL,4,vreg_en);
			if (rc < 0) {
				pr_err("%s: rt9396_ldo_enable(ldo4) OFF failed\n", __func__);
			}
			pr_err("%s: msm_camera_vreg_config power on vreg_en disable end\n", __func__);
	
		}	
#else

	if (vreg_en) {
		pr_err("%s: msm_camera_vreg_config power on vreg_en enable\n", __func__);

		//IOVDD: 1.8V START

		rc = bu61800_ldo_enable(NULL,4,vreg_en); 
		if (rc < 0) {
			pr_err("%s: bu61800_ldo_enable(ldo4) failed\n", __func__);
		}
		//IOVDD: 1.8V END

		//AVDD: 2.8V START

		rc = bu61800_ldo_enable(NULL,2,vreg_en);
		if (rc < 0) {
			pr_err("%s: bu61800_ldo_enable(ldo2) failed\n", __func__);
		}
		//AVDD: 2.8V END

		//DVDD: 1.2V START

		rc = bu61800_ldo_enable(NULL,3,vreg_en);
		if (rc < 0) {
			pr_err("%s: bu61800_ldo_enable(ldo3) failed\n", __func__);
		}
		//DVDD: 1.2V END

	} 
	else {
		
	 	pr_err("%s: msm_camera_vreg_config power on vreg_en disable start\n", __func__);

		rc = bu61800_ldo_enable(NULL,3,vreg_en);
		if (rc < 0) {
			pr_err("%s: bu61800_ldo_enable(ldo3) OFF failed\n", __func__);
		}

		rc = bu61800_ldo_enable(NULL,2,vreg_en);
		if (rc < 0) {
			pr_err("%s: bu61800_ldo_enable(ldo2) OFF failed\n", __func__);
		}

		rc = bu61800_ldo_enable(NULL,4,vreg_en);
		if (rc < 0) {
			pr_err("%s: bu61800_ldo_enable(ldo4) OFF failed\n", __func__);
		}
		pr_err("%s: msm_camera_vreg_config power on vreg_en disable end\n", __func__);

	}

	//default
#endif
	return rc;
}
static int msm_camera_vreg_config(int vreg_en)
{
	int rc = 0;

/*                                                                         */
#ifdef CONFIG_MACH_MSM7X25A_V1
	if( vreg_en ) {
		pr_info("%s: msm_camera_vreg_config power on.\n", __func__);

		/* CAM_IOVDD */
		rc = lge_rt8966a_ldo_control( 4, vreg_en );
		if( rc != 0 )
			pr_err("%s: CAM_IOVDD on failed.\n", __func__);

		/* CAM_AVDD */
		rc = lge_rt8966a_ldo_control( 2, vreg_en );
		if( rc != 0 )
			pr_err("%s: CAM_AVDD on failed.\n", __func__);

		/* CAM_DVDD */
		rc = lge_rt8966a_ldo_control( 3, vreg_en );
		if( rc != 0 )
			pr_err("%s: CAM_DVDD on failed.\n", __func__);

		pr_err("%s: msm_camera_vreg_config power on ok.\n", __func__);
	}
	else {
		pr_info("%s: msm_camera_vreg_config power off.\n", __func__);

		/* CAM_DVDD */
		rc = lge_rt8966a_ldo_control( 3, vreg_en );
		if( rc != 0 )
			pr_err("%s: CAM_DVDD off failed.\n", __func__);

		/* CAM_AVDD */
		rc = lge_rt8966a_ldo_control( 2, vreg_en );
		if( rc != 0 )
			pr_err("%s: CAM_AVDD off failed.\n", __func__);

		/* CAM_IOVDD */
		rc = lge_rt8966a_ldo_control( 4, vreg_en );
		if( rc != 0 )
			pr_err("%s: CAM_IOVDD off failed.\n", __func__);

		pr_err("%s: msm_camera_vreg_config power off ok.\n", __func__);
	}
#else /* !CONFIG_MACH_MSM7X25A_V1 */
#if defined (CONFIG_SENSOR_APDS9190)

		if (vreg_en) {
			pr_err("%s: msm_camera_vreg_config power on vreg_en enable\n", __func__);

			//IOVDD: 1.8V START

			rc = rt9396_ldo_enable(NULL,4,vreg_en);
			if (rc < 0) {
				pr_err("%s: rt9396_ldo_enable(ldo4) failed\n", __func__);
			}
			//IOVDD: 1.8V END

			//AVDD: 2.8V START

			rc = rt9396_ldo_enable(NULL,2,vreg_en);
			if (rc < 0) {
				pr_err("%s: rt9396_ldo_enable(ldo2) failed\n", __func__);
			}
			//AVDD: 2.8V END

			//DVDD: 1.2V START

			rc = rt9396_ldo_enable(NULL,3,vreg_en);
			if (rc < 0) {
				pr_err("%s: rt9396_ldo_enable(ldo3) failed\n", __func__);
			}
			//DVDD: 1.2V END

		}
		else {

			pr_err("%s: msm_camera_vreg_config power on vreg_en disable start\n", __func__);

			rc = rt9396_ldo_enable(NULL,3,vreg_en);
			if (rc < 0) {
				pr_err("%s: rt9396_ldo_enable(ldo3) OFF failed\n", __func__);
			}

			rc = rt9396_ldo_enable(NULL,2,vreg_en);
			if (rc < 0) {
				pr_err("%s: rt9396_ldo_enable(ldo2) OFF failed\n", __func__);
			}

			rc = rt9396_ldo_enable(NULL,4,vreg_en);
			if (rc < 0) {
				pr_err("%s: rt9396_ldo_enable(ldo4) OFF failed\n", __func__);
			}
			pr_err("%s: msm_camera_vreg_config power on vreg_en disable end\n", __func__);

		}
#else

	if (vreg_en) {
		pr_err("%s: msm_camera_vreg_config power on vreg_en enable\n", __func__);

		//IOVDD: 1.8V START

		rc = bu61800_ldo_enable(NULL,4,vreg_en);
		if (rc < 0) {
			pr_err("%s: bu61800_ldo_enable(ldo4) failed\n", __func__);
		}
		//IOVDD: 1.8V END

		//AVDD: 2.8V START

		rc = bu61800_ldo_enable(NULL,2,vreg_en);
		if (rc < 0) {
			pr_err("%s: bu61800_ldo_enable(ldo2) failed\n", __func__);
		}
		//AVDD: 2.8V END

		//DVDD: 1.2V START

		rc = bu61800_ldo_enable(NULL,3,vreg_en);
		if (rc < 0) {
			pr_err("%s: bu61800_ldo_enable(ldo3) failed\n", __func__);
		}
		//DVDD: 1.2V END

	}
	else {

	 	pr_err("%s: msm_camera_vreg_config power on vreg_en disable start\n", __func__);

		rc = bu61800_ldo_enable(NULL,3,vreg_en);
		if (rc < 0) {
			pr_err("%s: bu61800_ldo_enable(ldo3) OFF failed\n", __func__);
		}

		rc = bu61800_ldo_enable(NULL,2,vreg_en);
		if (rc < 0) {
			pr_err("%s: bu61800_ldo_enable(ldo2) OFF failed\n", __func__);
		}

		rc = bu61800_ldo_enable(NULL,4,vreg_en);
		if (rc < 0) {
			pr_err("%s: bu61800_ldo_enable(ldo4) OFF failed\n", __func__);
		}
		pr_err("%s: msm_camera_vreg_config power on vreg_en disable end\n", __func__);

	}
#endif
#endif /* CONFIG_MACH_MSM7X25A_V1 */
/*                                                                         */

	return rc;
}