ssize_t gpu_busy_show(struct device *dev, struct device_attribute *attr, char *buf)
{
	char 	      	time_consumed_str[INPUT_BUFFER_SIZE_32] = {0};
	char 	      	time_elapsed_str[INPUT_BUFFER_SIZE_32] = {0};
	unsigned int 	time_consumed = 0;
	unsigned int 	time_elapsed = 0;
	char   		 	input_buffer[INPUT_BUFFER_SIZE_32];
	int				status = 0;	
	
	status = open_file_and_read_buffer(GPU_MAX_CLOCK, input_buffer, INPUT_BUFFER_SIZE_32);

	if (status != SRUK_TRUE)
	{
		return sprintf(buf, "-1");
	}

	/* ************************************ */
	/* Parse input to find utilization ratio.
	 * This is target specific. 
	 * kgsl drive outputs utilzation in terms of 
	 * elapsed time using "%7d %7d"
	 * */
	/* ************************************ */
	strncpy(time_consumed_str, input_buffer,   7);
	strncpy(time_elapsed_str,  input_buffer+8, 7);
	
	time_consumed = atoi_ignore_space(time_consumed_str);
	time_elapsed = atoi_ignore_space(time_elapsed_str);

	return sprintf(buf, "%d\n", ((time_consumed*100)/time_elapsed));
}
ssize_t gpu_version_show(struct device *dev, struct device_attribute *attr, char *buf)
{
	char 	      	version_major_str[INPUT_BUFFER_SIZE_16] = {0};
	char 	      	version_minor_str[INPUT_BUFFER_SIZE_16] = {0};
	unsigned int 	version_major = 0, version_minor = 0;
	char   		 	input_buffer[INPUT_BUFFER_SIZE_128];
	int				status = 0;	
	
	status = open_file_and_read_buffer(GPU_VERSION, input_buffer, INPUT_BUFFER_SIZE_128);

	if (status != SRUK_TRUE)
	{
		return sprintf(buf, "-1");
	}

	/* ************************************ */
	/* Parse input to find gpu version.
	 * This is target specific. 
	 * The driver gives information in following
	 * format:
	 *    MAJOR=242 
	 *    MINOR=0 
	 *    DEVNAME=kgsl-3d0
	 * */
	/* ************************************ */
	
	strncpy(version_major_str, input_buffer+6, 5);
	strncpy(version_minor_str, input_buffer+17, 5);
	
	version_major = atoi_ignore_space(version_major_str);
	version_minor = atoi_ignore_space(version_minor_str);

	return sprintf(buf, "%d.%d\n", version_major, version_minor);
}
ssize_t gpu_max_clock_show(struct device *dev, struct device_attribute *attr, char *buf)
{
	char   	input_buffer[INPUT_BUFFER_SIZE_32];
	int		status = 0;	
	
	status = open_file_and_read_buffer(GPU_MAX_CLOCK, input_buffer, INPUT_BUFFER_SIZE_32);

	if (status == SRUK_TRUE)
	{
		return sprintf(buf, "%s", input_buffer);
	}
	else
	{
		return sprintf(buf, "-1");
	}
}
ssize_t gpu_available_governor_show(struct device *dev, struct device_attribute *attr, char *buf)
{
	char   	input_buffer[INPUT_BUFFER_SIZE_256];
	int		status = 0;	
	
	status = open_file_and_read_buffer(GPU_AVAIL_GOVERNOR, input_buffer, INPUT_BUFFER_SIZE_256);

	if (status == SRUK_TRUE)
	{
		return sprintf(buf, "%s", input_buffer);
	}
	else
	{
		return sprintf(buf, "-1");
	}
}
ssize_t gpu_freq_table_show(struct device *dev, struct device_attribute *attr, char *buf)
{
	char   	input_buffer[INPUT_BUFFER_SIZE_128];
	int		status = 0;	
	
	status = open_file_and_read_buffer(GPU_FREQ_TABLE, input_buffer, INPUT_BUFFER_SIZE_128);

	if (status == SRUK_TRUE)
	{
		return sprintf(buf, "%s", input_buffer);
	}
	else
	{
		return sprintf(buf, "-1");
	}
}
ssize_t gpu_model_show(struct device *dev, struct device_attribute *attr, char *buf)
{
	char   		 	input_buffer[INPUT_BUFFER_SIZE_128];
	int				status = 0;	
	char 			*parse_pointer = input_buffer;
	int    			char_counter = 0, equal_char_counter = 0;
	
	status = open_file_and_read_buffer(GPU_VERSION, input_buffer, INPUT_BUFFER_SIZE_128);

	if (status != SRUK_TRUE)
	{
		return sprintf(buf, "-1");
	}

	/* ************************************ */
	/* Parse input to find gpu version.
	 * This is target specific. 
	 * The driver gives information in following
	 * format:
	 *    MAJOR=242 
	 *    MINOR=0 
	 *    DEVNAME=kgsl-3d0
	 * */
	/* ************************************ */
	
	while (*parse_pointer != '\0')
	{
		/* Look for '='. */
		if (*parse_pointer == '=')
		{
			equal_char_counter++;
		}
		
		/* */
		parse_pointer++;
		char_counter++;
		
		if (equal_char_counter == 3)
		{
			break;
		}
	}
	
	/* Copy the model string to the output string.*/
	return sprintf(buf, "%s\n", input_buffer+char_counter);
}