Example #1
0
//[*]--------------------------------------------------------------------------------------------------[*]
//[*]--------------------------------------------------------------------------------------------------[*]
static	ssize_t store_fw_status	(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
{
	struct touch 	*ts = dev_get_drvdata(dev);
	int 			err;
	unsigned long 	val;

	if ((err = strict_strtoul(buf, 10, &val)))		return err;

	switch(val)	{
		case	STATUS_BOOT_MODE:
			ts->fw_status |= (touch_set_mode(ts, TOUCH_BOOT_MODE) == 0) ? STATUS_BOOT_MODE : err_status(STATUS_BOOT_MODE);
			if(!err_mask(ts->fw_status))	{
				ts->fw_size = 0;
				if(ts->fw_buf != NULL)	memset(ts->fw_buf, 0x00, MAX_FW_SIZE);	
				else					ts->fw_buf = (unsigned char *)kzalloc(MAX_FW_SIZE, GFP_KERNEL);
				
				if(ts->fw_buf == NULL)	ts->fw_status |= err_status(STATUS_NO_MEMORY);
			}
			break;
		case	STATUS_FW_CHECK:
			if(ts->fw_status & STATUS_BOOT_MODE)	{
				ts->fw_status &= (~STATUS_FW_CHECK);
				ts->fw_status |= (ts->fw_size <= MAX_FW_SIZE) ? STATUS_FW_CHECK : err_status(STATUS_FW_CHECK);
			}
			break;
		case	STATUS_FW_ERASE:
			if(ts->fw_status & STATUS_BOOT_MODE)	{
				ts->fw_status &= (~STATUS_FW_ERASE);
				ts->fw_status |= (touch_flash_erase(ts, ts->fw_size) == 0) ? STATUS_FW_ERASE : err_status(STATUS_FW_ERASE);
			}
			break;
		case	STATUS_FW_WRITE:
			if(ts->fw_status & STATUS_BOOT_MODE)	{
				ts->fw_status &= (~STATUS_FW_WRITE);
				ts->fw_status |= (touch_flash_write(ts, ts->fw_size, ts->fw_buf) == 0) ? STATUS_FW_WRITE : err_status(STATUS_FW_WRITE);
			}
			break;
		case	STATUS_FW_VERIFY:
			if(ts->fw_status & STATUS_BOOT_MODE)	{
				ts->fw_status &= (~STATUS_FW_VERIFY);
				ts->fw_status |= (touch_flash_verify(ts, ts->fw_size, ts->fw_buf) == 0) ? STATUS_FW_VERIFY : err_status(STATUS_FW_VERIFY);
			}
			break;
		case	STATUS_USER_MODE:
			if(ts->fw_buf != NULL)	{
				kfree(ts->fw_buf);	ts->fw_buf = NULL;	ts->fw_size = 0;
			}
			ts->fw_status = 
				(touch_set_mode(ts, TOUCH_USER_MODE) == 0) ? STATUS_USER_MODE : (err_status(STATUS_USER_MODE) | STATUS_BOOT_MODE);
			break;
		default	:
			ts->fw_status |= err_status(STATUS_NO_COMMAND);
			break;
	}
	return count;
}
Example #2
0
//[*]--------------------------------------------------------------------------------------------------[*]
// firmware version display
//[*]--------------------------------------------------------------------------------------------------[*]
static	ssize_t show_fw_version			(struct device *dev, struct device_attribute *attr, char *buf)
{
	struct touch 	*ts = dev_get_drvdata(dev);

	if(!err_mask(ts->fw_status) && !(ts->fw_status & STATUS_BOOT_MODE))	{
		touch_disable(ts);
		touch_wake_control(ts);
		touch_i2c_read(ts->client, REG_TS_FIRMWARE_ID, 1, &ts->fw_version);
		touch_enable(ts);
	}

	return sprintf(buf, "%d\n", ts->fw_version);
}
Example #3
0
static void report_extlog_mem_event(struct ras_events *ras,
				    struct pevent_record *record,
				    struct trace_seq *s,
				    struct ras_extlog_event *ev)
{
	trace_seq_printf(s, "%d %s error: %s physical addr: 0x%llx mask: 0x%llx%s %s %s",
		ev->error_seq, err_severity(ev->severity),
		err_type(ev->etype), ev->address,
		err_mask(ev->pa_mask_lsb),
		err_cper_data(ev->cper_data),
		ev->fru_text,
		uuid_le(ev->fru_id));
}
Example #4
0
//[*]--------------------------------------------------------------------------------------------------[*]
//   calibration (1 -> update calibration, 0 -> nothing), show -> NULL
//[*]--------------------------------------------------------------------------------------------------[*]
static	ssize_t store_calibration		(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
{
	struct touch 	*ts = dev_get_drvdata(dev);
	unsigned long 	val;
	int 			err;

	if ((err = strict_strtoul(buf, 10, &val)))	return err;

	if (val == 1)	{
		if(!err_mask(ts->fw_status) && !(ts->fw_status & STATUS_BOOT_MODE))	{
			touch_calibration(ts);
		}
	}

	return count;
}
Example #5
0
//[*]--------------------------------------------------------------------------------------------------[*]
//[*]--------------------------------------------------------------------------------------------------[*]
//   disablel (1 -> disable irq, cancel work, 0 -> enable irq), show irq state
//[*]--------------------------------------------------------------------------------------------------[*]
static	ssize_t show_idle				(struct device *dev, struct device_attribute *attr, char *buf)
{
	struct touch 	*ts = dev_get_drvdata(dev);
	unsigned char	idle = 0;

	if(!err_mask(ts->fw_status) && !(ts->fw_status & STATUS_BOOT_MODE))	{
		touch_disable(ts);
		touch_wake_control(ts);
		if(touch_i2c_read(ts->client, REG_TS_IDLE_RD, 1, &idle) == 1)		{
			touch_enable(ts);
			return sprintf(buf, "%d\n", idle);
		}
		touch_enable(ts);
	}
	return sprintf(buf, "%d\n", -1);
}
Example #6
0
//[*]--------------------------------------------------------------------------------------------------[*]
static	ssize_t store_idle			(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
{
	struct touch 	*ts = dev_get_drvdata(dev);
	unsigned long 	val  = 0;
	unsigned char	idle = 0;
	int 			err;

	if ((err = strict_strtoul(buf, 10, &val)))	return err;

	if (val > 255 && val < 0)	idle = 0;
	else	{
		idle = (unsigned char)val;
		if(!err_mask(ts->fw_status) && !(ts->fw_status & STATUS_BOOT_MODE))	{
			touch_disable(ts);
			touch_wake_control(ts);
			touch_i2c_write(ts->client, REG_TS_IDLE_WR, 1, &idle);
			touch_enable(ts);
		}
	}

	return count;
}