1 /* linux/arch/arm/mach-s3c2440/dsc.c 2 * 3 * Copyright (c) 2004-2005 Simtec Electronics 4 * Ben Dooks <ben@simtec.co.uk> 5 * 6 * Samsung S3C2440 Drive Strength Control support 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License version 2 as 10 * published by the Free Software Foundation. 11 */ 12 13 #include <linux/kernel.h> 14 #include <linux/types.h> 15 #include <linux/interrupt.h> 16 #include <linux/init.h> 17 #include <linux/module.h> 18 #include <linux/io.h> 19 20 #include <asm/mach/arch.h> 21 #include <asm/mach/map.h> 22 #include <asm/mach/irq.h> 23 24 #include <mach/hardware.h> 25 #include <asm/irq.h> 26 27 #include <mach/regs-gpio.h> 28 #include <mach/regs-dsc.h> 29 30 #include <plat/cpu.h> 31 #include <plat/s3c244x.h> 32 s3c2440_set_dsc(unsigned int pin,unsigned int value)33int s3c2440_set_dsc(unsigned int pin, unsigned int value) 34 { 35 void __iomem *base; 36 unsigned long val; 37 unsigned long flags; 38 unsigned long mask; 39 40 base = (pin & S3C2440_SELECT_DSC1) ? S3C2440_DSC1 : S3C2440_DSC0; 41 mask = 3 << S3C2440_DSC_GETSHIFT(pin); 42 43 local_irq_save(flags); 44 45 val = __raw_readl(base); 46 val &= ~mask; 47 val |= value & mask; 48 __raw_writel(val, base); 49 50 local_irq_restore(flags); 51 return 0; 52 } 53 54 EXPORT_SYMBOL(s3c2440_set_dsc); 55