static int mtkts6311_bind(struct thermal_zone_device *thermal,
			struct thermal_cooling_device *cdev)
{
	int table_val=0;

	if(!strcmp(cdev->type, g_bind0))
	{
		table_val = 0;
	}
	else if(!strcmp(cdev->type, g_bind1))
	{
		table_val = 1;
	}
	else if(!strcmp(cdev->type, g_bind2))
	{
		table_val = 2;
	}
	else if(!strcmp(cdev->type, g_bind3))
	{
		table_val = 3;
	}
	else if(!strcmp(cdev->type, g_bind4))
	{
		table_val = 4;
	}
	else if(!strcmp(cdev->type, g_bind5))
	{
		table_val = 5;
	}
	else if(!strcmp(cdev->type, g_bind6))
	{
		table_val = 6;
	}
	else if(!strcmp(cdev->type, g_bind7))
	{
		table_val = 7;
	}
	else if(!strcmp(cdev->type, g_bind8))
	{
		table_val = 8;
	}
	else if(!strcmp(cdev->type, g_bind9))
	{
		table_val = 9;
	}
	else
	{
		return 0;
	}

	if (mtk_thermal_zone_bind_cooling_device(thermal, table_val, cdev)) {
		mtkts6311_dprintk("[mtkts6311_bind] error binding cooling dev\n");
		return -EINVAL;
	} else {
		mtkts6311_dprintk("[mtkts6311_bind] binding OK, %d\n", table_val);
	}

	return 0;
}
static int ts6311_sysrst_get_cur_state(struct thermal_cooling_device *cdev,
				 unsigned long *state)
{
	mtkts6311_dprintk("ts6311_sysrst_get_cur_state = %d \n",cl_dev_sysrst_state);
	*state = cl_dev_sysrst_state;
	return 0;
}
static int ts6311_sysrst_get_max_state(struct thermal_cooling_device *cdev,
				 unsigned long *state)
{
	mtkts6311_dprintk("ts6311_sysrst_get_max_state!!!\n");
	*state = 1;
	return 0;
}
Exemplo n.º 4
0
static int ts6311_sysrst_set_cur_state(struct thermal_cooling_device *cdev,
				 unsigned long state)
{
	mtkts6311_dprintk("ts6311_sysrst_set_cur_state = %d \n",cl_dev_sysrst_state);
	cl_dev_sysrst_state = state;
	if(cl_dev_sysrst_state == 1)
	{
		printk("Power/6311_Thermal: reset, reset, reset!!!");
		printk("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
		printk("*****************************************");
		printk("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");

		BUG();
	}
	return 0;
}
static int ts6311_sysrst_set_cur_state(struct thermal_cooling_device *cdev,
				 unsigned long state)
{
	mtkts6311_dprintk("ts6311_sysrst_set_cur_state = %d \n",cl_dev_sysrst_state);
	cl_dev_sysrst_state = state;
	if(cl_dev_sysrst_state == 1)
	{
		printk("Power/6311_Thermal: reset, reset, reset!!!");
		printk("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
		printk("*****************************************");
		printk("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");

#ifndef CONFIG_ARM64
        BUG();
#else
        *(unsigned int*) 0x0 = 0xdead; // To trigger data abort to reset the system for thermal protection.
#endif
	}
	return 0;
}
static int mtkts6311_get_temp(struct thermal_zone_device *thermal,
				   unsigned long *t)
{
	mtkts6311_dprintk("[mtkts6311_get_temp]\n");

	*t=50000;//default 50 degree


	if(mt6311_get_pmu_thr_status()==0x0)//T<110
	{
		*t=60000;
		mtkts6331_dprintk("mt6311_get_pmu_thr_status()==0x0\n");
		if(mt6311_get_rg_thr_l_int_status()==1)//receive interrupt
        {

			*t=80000;//60 degree
			printk("[Thermal/PMIC_6331]mt6311_get_thr_l_int_status()==1,6311 T=80 deg\n");
			mt6311_clr_thr_l_int_status();

			mt6311_set_rg_strup_thr_110_clr(1);//Set 0x28 bit 0=1 ;CLR 110 INT
			udelay(10);
			mt6311_set_rg_strup_thr_110_clr(0);

			mt6311_set_rg_strup_thr_110_irq_en(0);//Set 0x28 bit 2=0 ; disable 110 INT
            mt6311_set_rg_strup_thr_125_irq_en(1);//Set 0x28 bit 3=1; EN >125 INT

		}
	}
	else if(mt6311_get_pmu_thr_status()==0x1)//110<T<125
	{
		mtkts6331_dprintk("mt6311_get_pmu_thr_status()==0x1\n");

		*t=115000;//115 degree

		printk("[Thermal/PMIC_6331]6311 pmic temp : 110<T<125 deg\n");
	}
	else if(mt6311_get_pmu_thr_status()==0x3)//125<T<150
	{
		*t=130000;//130 degree
		//printk("[Thermal/PMIC_6331]mt6311_get_pmu_thr_status()==0x3\n");
		printk("[Thermal/PMIC_6331]6311 pmic temp 125<T<150 deg\n");

		if(mt6311_get_rg_thr_h_int_status()==1){//receive interrupt

            *t=135000;//135 degree
			printk("[Thermal/PMIC_6331]6311 pmic temp =140 deg\n");
            //printk("[Thermal/PMIC_6331]mt6311_get_rg_thr_h_int_status()==1,6311 T=135 deg\n");

            mtkts6331_dprintk("mt6311_get_thr_h_int_status()==1\n");
			mt6311_clr_thr_h_int_status();

			mt6311_set_rg_strup_thr_125_clr(1);//Set 0x28 bit 1=1 ;CLR 125 INT
			udelay(10);
	        mt6311_set_rg_strup_thr_125_clr(0);

			mt6311_set_rg_strup_thr_125_irq_en(0);//Set 0x28 bit 3=0 ; disable 125 INT
			mt6311_set_rg_strup_thr_110_irq_en(1);//Set 0x28 bit 2=1; EN <110 INT
		}

	}
	mtkts6331_dprintk("6311 pmic temp =%d\n",*t);
	return 0;
}