Esempio n. 1
0
/*
 * Respond to timing out waiting for Modem
 *
 * NOTE: The function never returns.
 */
static void msm_pm_timeout(void)
{
#if defined(CONFIG_MSM_PM_TIMEOUT_RESET_CHIP)
	printk(KERN_EMERG "%s(): resetting chip\n", __func__);
	msm_proc_comm(PCOM_RESET_CHIP_IMM, NULL, NULL);
#elif defined(CONFIG_MSM_PM_TIMEOUT_RESET_MODEM)
	printk(KERN_EMERG "%s(): resetting modem\n", __func__);
	msm_proc_comm_reset_modem_now();
#elif defined(CONFIG_MSM_PM_TIMEOUT_HALT)
	printk(KERN_EMERG "%s(): halting\n", __func__);
#endif
	for (;;)
		;
}
Esempio n. 2
0
static int lockup_capture_check(int keycode, u8 keypress)
{ 
	#define NUM_CAPTURE_KEYS 3
#if defined (CONFIG_MACH_ESCAPE)	//sdk_ed12 'F' + 'Vol_Down' + 'Pwr'
	static int capture_keys[NUM_CAPTURE_KEYS]={33, 114, 116}; 
#elif defined(CONFIG_MACH_GIO)
	static int capture_keys[NUM_CAPTURE_KEYS]={102, 115, 116}; //cha Home + Volume down + Pwr Key
#elif defined(CONFIG_MACH_VINO) || defined(CONFIG_MACH_GIOS)
	static int capture_keys[]={KEY_VOLUMEUP, KEY_CAMERA, KEY_POWER};
#elif defined(CONFIG_MACH_RANT3)
	static int capture_keys[]={KEY_VOLUMEDOWN, KEY_P, KEY_POWER};
#else
	static int capture_keys[NUM_CAPTURE_KEYS]={158, 115, 116}; //cha back + volme up + pwr key // MBjgnoh 11.02.14 Volume down + back + Pwr Key
#endif
	int i, capture_keys_size = 0;
	int capture_key_cnt = 0;

	capture_keys_size = ARRAY_SIZE(capture_keys);

	for(i=0;i<capture_keys_size;i++) {
		if(keycode == (capture_keys[i]&~0x80000000)) {
			if(keypress)
				capture_keys[i]|=0x80000000;
			else
				capture_keys[i]&=~0x80000000;

		}
		if(capture_keys[i]&0x80000000)
			capture_key_cnt++;
	}
#ifndef TARGET_BUILD_USER
	printk("[lockup_capture_check] capture_key_cnt:%d, capture_keys_size:%d \n", capture_key_cnt, capture_keys_size);
#endif

	if(capture_key_cnt == capture_keys_size) {
		// notify to ARM9 for ram dump
		writel(0xCCCC, MSM_SHARED_RAM_BASE + 0x30); 
		printk("[PANIC] LOCKUP CAPTURED!!! \n");
		msm_proc_comm_reset_modem_now();
	}
}
Esempio n. 3
0
static ssize_t reset_modem_write(struct file *fp, const char __user *buf,
			 size_t count, loff_t *pos)
{
	unsigned char cmd[64];
	int len;
	int time;
	int zero = 0;
	int r;

	if (count < 1)
		return 0;

	len = count > 63 ? 63 : count;

	if (copy_from_user(cmd, buf, len))
		return -EFAULT;

	cmd[len] = 0;

	
	if (cmd[len-1] == '\n') {
		cmd[len-1] = 0;
		len--;
	}

	if (!strncmp(cmd, "wait", 4)) {
		D(KERN_ERR "INFO:%s:%i:%s: "
		       "MODEM RESTART: WAIT\n",
		       __FILE__,
		       __LINE__,
		       __func__);
		smsm_reset_modem(SMSM_MODEM_WAIT);
	} else if (!strncmp(cmd, "continue", 8)) {
		D(KERN_ERR "INFO:%s:%i:%s: "
		       "MODEM RESTART: CONTINUE\n",
		       __FILE__,
		       __LINE__,
		       __func__);
		smsm_reset_modem_cont();
	} else if (!strncmp(cmd, "download", 8)) {
		D(KERN_ERR "INFO:%s:%i:%s: "
		       "MODEM RESTART: DOWNLOAD\n",
		       __FILE__,
		       __LINE__,
		       __func__);
		smsm_reset_modem(SMSM_SYSTEM_DOWNLOAD);
	} else if (sscanf(cmd, "deferred reset %i", &time) == 1) {
		D(KERN_ERR "INFO:%s:%i:%s: "
		       "MODEM RESTART: DEFERRED RESET %ims\n",
		       __FILE__,
		       __LINE__,
		       __func__,
		       time);
		if (time == 0) {
			r = 0;
			msm_proc_comm_reset_modem_now();
		} else {
			r = msm_proc_comm(PCOM_RESET_MODEM, &time, &zero);
		}
		if (r < 0)
			return r;
	} else if (!strncmp(cmd, "deferred reset", 14)) {
		D(KERN_ERR "INFO:%s:%i:%s: "
		       "MODEM RESTART: DEFERRED RESET 0ms\n",
		       __FILE__,
		       __LINE__,
		       __func__);
		r = 0;
		msm_proc_comm_reset_modem_now();
		if (r < 0)
			return r;
	} else if (!strncmp(cmd, "reset chip now", 14)) {
		uint param1 = 0x0;
		uint param2 = 0x0;

		D(KERN_ERR "INFO:%s:%i:%s: "
		  "MODEM RESTART: CHIP RESET IMMEDIATE\n",
		  __FILE__,
		  __LINE__,
		  __func__);

		r = msm_proc_comm(PCOM_RESET_CHIP_IMM, &param1, &param2);

		if (r < 0)
			return r;
	} else if (!strncmp(cmd, "reset chip", 10)) {

		uint param1 = 0x0;
		uint param2 = 0x0;

		D(KERN_ERR "INFO:%s:%i:%s: "
		  "MODEM RESTART: CHIP RESET \n",
		  __FILE__,
		  __LINE__,
		  __func__);

		r = msm_proc_comm(PCOM_RESET_CHIP, &param1, &param2);

		if (r < 0)
			return r;
	} else if (!strncmp(cmd, "reset", 5)) {
		printk(KERN_ERR "INFO:%s:%i:%s: "
		       "MODEM RESTART: RESET\n",
		       __FILE__,
		       __LINE__,
		       __func__);
		smsm_reset_modem(SMSM_RESET);
	} else
		return -EINVAL;

	return count;
}
Esempio n. 4
0
static ssize_t reset_modem_write(struct file *fp, const char __user *buf,
			 size_t count, loff_t *pos)
{
	unsigned char cmd[64];
	int len;
	int time;
	int zero = 0;
	int r;

	if (count < 1)
		return 0;

	len = count > 63 ? 63 : count;

	if (copy_from_user(cmd, buf, len))
		return -EFAULT;

	cmd[len] = 0;

	/* lazy */
	if (cmd[len-1] == '\n') {
		cmd[len-1] = 0;
		len--;
	}

	if (!strncmp(cmd, "wait", 4)) {
		D(KERN_ERR "INFO:%s:%i:%s: "
		       "MODEM RESTART: WAIT\n",
		       __FILE__,
		       __LINE__,
		       __func__);
		smsm_reset_modem(SMSM_MODEM_WAIT);
	} else if (!strncmp(cmd, "continue", 8)) {
		D(KERN_ERR "INFO:%s:%i:%s: "
		       "MODEM RESTART: CONTINUE\n",
		       __FILE__,
		       __LINE__,
		       __func__);
		smsm_reset_modem_cont();
	} else if (!strncmp(cmd, "download", 8)) {
		D(KERN_ERR "INFO:%s:%i:%s: "
		       "MODEM RESTART: DOWNLOAD\n",
		       __FILE__,
		       __LINE__,
		       __func__);
		smsm_reset_modem(SMSM_SYSTEM_DOWNLOAD);
	} else if (sscanf(cmd, "deferred reset %i", &time) == 1) {
		D(KERN_ERR "INFO:%s:%i:%s: "
		       "MODEM RESTART: DEFERRED RESET %ims\n",
		       __FILE__,
		       __LINE__,
		       __func__,
		       time);
		if (time == 0) {
			r = 0;
			msm_proc_comm_reset_modem_now();
		} else {
			r = msm_proc_comm(PCOM_RESET_MODEM, &time, &zero);
		}
		if (r < 0)
			return r;
	} else if (!strncmp(cmd, "deferred reset", 14)) {
		D(KERN_ERR "INFO:%s:%i:%s: "
		       "MODEM RESTART: DEFERRED RESET 0ms\n",
		       __FILE__,
		       __LINE__,
		       __func__);
		r = 0;
		msm_proc_comm_reset_modem_now();
		if (r < 0)
			return r;
	} else if (!strncmp(cmd, "reset chip now", 14)) {
#ifndef CONFIG_SW_RESET
		uint param1 = 0x0;
		uint param2 = 0x0;
#endif
		D(KERN_ERR "INFO:%s:%i:%s: "
		  "MODEM RESTART: CHIP RESET IMMEDIATE\n",
		  __FILE__,
		  __LINE__,
		  __func__);

#if defined(CONFIG_SW_RESET)
		r = sky_sys_rst_UserReset_imm(NULL);
#else
		r = msm_proc_comm(PCOM_RESET_CHIP_IMM, &param1, &param2);
#endif

		if (r < 0)
			return r;
	} else if (!strncmp(cmd, "reset chip", 10)) {
#ifndef CONFIG_SW_RESET		
		uint param1 = 0x0;
		uint param2 = 0x0;
#endif
		D(KERN_ERR "INFO:%s:%i:%s: "
		  "MODEM RESTART: CHIP RESET \n",
		  __FILE__,
		  __LINE__,
		  __func__);

#if defined(CONFIG_SW_RESET)
		r = sky_sys_rst_UserReset(NULL);
#else
		r = msm_proc_comm(PCOM_RESET_CHIP, &param1, &param2);
#endif

		if (r < 0)
			return r;
#if defined(CONFIG_SW_RESET)
	} else if (!strncmp(cmd, "reset sw now", 12)) {

		D(KERN_ERR "INFO:%s:%i:%s: "
		  "MODEM SW RESTART: CHIP RESET IMMEDIATE\n",
		  __FILE__,
		  __LINE__,
		  __func__);

		r = sky_sys_rst_SwReset_imm(NULL);

		if (r < 0)
		{
			D(KERN_ERR "ERROR: sky_sys_rst_SwReset_imm failed: %d\n", r);
			return r;
		}
	} else if (!strncmp(cmd, "reset sw exception", 8)) {

		D(KERN_ERR "INFO:%s:%i:%s: "
		  "MODEM SW RESTART: CHIP EXCEPTION \n",
		  __FILE__,
		  __LINE__,
		  __func__);

		BUG();
		return 0;

#endif
	} else if (!strncmp(cmd, "reset", 5)) {
		printk(KERN_ERR "INFO:%s:%i:%s: "
		       "MODEM RESTART: RESET\n",
		       __FILE__,
		       __LINE__,
		       __func__);
		smsm_reset_modem(SMSM_RESET);
	} 
#ifdef FEATURE_SKY_CHG_LOGO
	else if(!strncmp(cmd,"powerdown",9)) {

		printk(KERN_ERR "INFO:%s:%i:%s: "
		       "MODEM POWER DOWN: OFF\n",
		       __FILE__,
		       __LINE__,
		       __func__);
		
		r = msm_proc_comm(PCOM_POWER_DOWN, 0,0);

		if (r < 0)
			return r;

		for(;;)
			;
	}
#endif
	else
		return -EINVAL;

	return count;
}