cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

adc.c (709B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * linux/arch/sh/kernel/adc.c -- SH3 on-chip ADC support
      4 *
      5 *  Copyright (C) 2004  Andriy Skulysh <askulysh@image.kiev.ua>
      6 */
      7
      8#include <linux/module.h>
      9#include <asm/adc.h>
     10#include <asm/io.h>
     11
     12
     13int adc_single(unsigned int channel)
     14{
     15	int off;
     16	unsigned char csr;
     17
     18	if (channel >= 8) return -1;
     19
     20	off = (channel & 0x03) << 2;
     21
     22	csr = __raw_readb(ADCSR);
     23	csr = channel | ADCSR_ADST | ADCSR_CKS;
     24	__raw_writeb(csr, ADCSR);
     25
     26	do {
     27		csr = __raw_readb(ADCSR);
     28	} while ((csr & ADCSR_ADF) == 0);
     29
     30	csr &= ~(ADCSR_ADF | ADCSR_ADST);
     31	__raw_writeb(csr, ADCSR);
     32
     33	return (((__raw_readb(ADDRAH + off) << 8) |
     34		__raw_readb(ADDRAL + off)) >> 6);
     35}
     36
     37EXPORT_SYMBOL(adc_single);