Exemplo n.º 1
0
int s3c_adc_get_adc_data(int channel)
{
	int adc_value = 0;
	int cur_adc_port = 0;

#ifdef ADC_WITH_TOUCHSCREEN
        mutex_lock(&adc_mutex);
	s3c_adc_save_SFR_on_ADC();
#else
        mutex_lock(&adc_mutex);
#endif

	cur_adc_port = adc_port;
	adc_port = channel;

	adc_value = s3c_adc_convert();

	adc_port = cur_adc_port;

#ifdef ADC_WITH_TOUCHSCREEN
	s3c_adc_restore_SFR_on_ADC();
	mutex_unlock(&adc_mutex);
#else
	mutex_unlock(&adc_mutex);
#endif

	pr_debug("%s : Converted Value: %03d\n", __FUNCTION__, adc_value);

	return adc_value;
}
Exemplo n.º 2
0
static ssize_t
s3c_adc_read(struct file *file, char __user * buffer,
		size_t size, loff_t * pos)
{
	int  adc_value = 0;

	printk(KERN_INFO " s3c_adc_read() entered\n");

#ifdef ADC_WITH_TOUCHSCREEN
        mutex_lock(&adc_mutex);
	s3c_adc_save_SFR_on_ADC();
#endif


	adc_value = s3c_adc_convert();

#ifdef ADC_WITH_TOUCHSCREEN
	s3c_adc_restore_SFR_on_ADC();
	mutex_unlock(&adc_mutex);
#endif

	printk(KERN_INFO " Converted Value: %03d\n", adc_value);

	if (copy_to_user(buffer, &adc_value, sizeof(unsigned int))) {
		return -EFAULT;
	}
	return sizeof(unsigned int);
}
Exemplo n.º 3
0
unsigned int get_s3c_adc_convert(int channel)
{
	unsigned int adc_return = 0;
	unsigned long data0;
	unsigned long data1;

	mutex_lock(&adc_mutex);
	    s3c_adc_save_SFR_on_ADC();
	    writel((channel & 0x7), base_addr + S3C_ADCMUX);
	    udelay(10);
	    writel(readl(base_addr + S3C_ADCCON) | S3C_ADCCON_ENABLE_START, base_addr + S3C_ADCCON);
	    do {			
		    msleep(1);
		    data0 = readl(base_addr + S3C_ADCCON);
	    } while (!(data0 & S3C_ADCCON_ECFLG));
	    data1 = readl(base_addr + S3C_ADCDAT0);
	    if (plat_data->resolution == 12)
		    adc_return = data1 & S3C_ADCDAT0_XPDATA_MASK_12BIT;
	    else
		    adc_return = data1 & S3C_ADCDAT0_XPDATA_MASK;
	    s3c_adc_restore_SFR_on_ADC();
    mutex_unlock(&adc_mutex);

	return adc_return;
}
Exemplo n.º 4
0
static ssize_t
s3c_adc_read(struct file *file, char __user *buffer,
		size_t size, loff_t *pos)
{
	int  adc_value = 0;

	mutex_lock(&adc_mutex);
		s3c_adc_save_SFR_on_ADC();
		printk(KERN_INFO "## delay: %d\n", readl(base_addr + S3C_ADCDLY));
		adc_value = s3c_adc_convert();
		s3c_adc_restore_SFR_on_ADC();
	mutex_unlock(&adc_mutex);

	if (copy_to_user(buffer, &adc_value, sizeof(unsigned int)))
		return -EFAULT;

	return sizeof(unsigned int);
}
Exemplo n.º 5
0
int s3c_adc_get_adc_data(int channel)
{
	int adc_value = 0;
	int cur_adc_port = 0;

	mutex_lock(&adc_mutex);
	    s3c_adc_save_SFR_on_ADC();
	    cur_adc_port = adc_port;
	    adc_port = channel;
	    adc_value = s3c_adc_convert();
	    adc_port = cur_adc_port;
	    s3c_adc_restore_SFR_on_ADC();
	mutex_unlock(&adc_mutex);

	pr_debug("%s : Converted Value: %03d\n", __func__, adc_value);

	return adc_value;
}
Exemplo n.º 6
0
int s3c_adc_convert_temp_data()
{
	int temprature;
	
	 
#ifdef ADC_WITH_TOUCHSCREEN
     mutex_lock(&adc_mutex);
	s3c_adc_save_SFR_on_ADC();
#else
        mutex_lock(&adc_mutex);
#endif
     s3c_adc_get_data();	
	 temprature =s3c_adc_convert_data(); 	
#ifdef ADC_WITH_TOUCHSCREEN
	s3c_adc_restore_SFR_on_ADC();
	mutex_unlock(&adc_mutex);
#else
	mutex_unlock(&adc_mutex);
#endif
   return temprature;

	}
Exemplo n.º 7
0
static int __devinit s3c_adc_probe(struct platform_device *pdev)
{
	struct resource	*res;
	struct device *dev;
	int ret;
	int size;

	g_ts0_base = ioremap(0xE1700000, 1024);
	if (g_ts0_base == NULL) {
		printk("ts0 base map failed\n");
		return -ENOENT;
	}

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	dev = &pdev->dev;

	if (res == NULL) {
		dev_err(dev, "no memory resource specified\n");
		return -ENOENT;
	}

	size = (res->end - res->start) + 1;

	adc_mem = request_mem_region(res->start, size, pdev->name);
	if (adc_mem == NULL) {
		dev_err(dev, "failed to get memory region\n");
		ret = -ENOENT;
		goto err_req;
	}

	base_addr = ioremap(res->start, size);
	if (base_addr ==  NULL) {
		dev_err(dev, "fail to ioremap() region\n");
		ret = -ENOENT;
		goto err_map;
	}

	adc_clock = clk_get(&pdev->dev, "adc");

	if (IS_ERR(adc_clock)) {
		dev_err(dev, "failed to fine ADC clock source\n");
		ret = PTR_ERR(adc_clock);
		goto err_clk;
	}

	clk_enable(adc_clock);

	/* read platform data from device struct */
	plat_data = s3c_adc_get_platdata(&pdev->dev);

	if ((plat_data->presc & 0xff) > 0)
		writel(S3C_ADCCON_PRSCEN |
		       S3C_ADCCON_PRSCVL(plat_data->presc & 0xff),
		       base_addr + S3C_ADCCON);
	else
		writel(0, base_addr + S3C_ADCCON);

	/* Initialise registers */
	if ((plat_data->delay & 0xffff) > 0)
		writel(plat_data->delay & 0xffff, base_addr + S3C_ADCDLY);

	if (plat_data->resolution == 12)
		writel(readl(base_addr + S3C_ADCCON) |
		       S3C_ADCCON_RESSEL_12BIT, base_addr + S3C_ADCCON);

	//writel((readl(base_addr + S3C_ADCCON) | S3C_ADCCON_STDBM) & ~S3C_ADCCON_PRSCEN,
		//base_addr + S3C_ADCCON);

    s3c_adc_restore_SFR_on_ADC();

	ret = misc_register(&s3c_adc_miscdev);
	if (ret) {
		printk(KERN_ERR "cannot register miscdev on minor=%d (%d)\n",
			ADC_MINOR, ret);
		goto err_clk;
	}

	return 0;

err_clk:
	clk_disable(adc_clock);
	clk_put(adc_clock);

err_map:
	iounmap(base_addr);

err_req:
	release_resource(adc_mem);
	kfree(adc_mem);

	return ret;
}