From 2848552cef6a14fe4e54e676a61a340c8fd023b3 Mon Sep 17 00:00:00 2001 From: Ben Dooks Date: Wed, 27 Jan 2010 18:13:59 +0900 Subject: ARM: SAMSUNG: Add DMA masks to hsotg device Add the required DMA masks to the hs-otg device definition to allow DMA to work with it. Signed-off-by: Ben Dooks --- arch/arm/plat-samsung/dev-usb-hsotg.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'arch/arm') diff --git a/arch/arm/plat-samsung/dev-usb-hsotg.c b/arch/arm/plat-samsung/dev-usb-hsotg.c index e2f604b51c86..33a844ab6917 100644 --- a/arch/arm/plat-samsung/dev-usb-hsotg.c +++ b/arch/arm/plat-samsung/dev-usb-hsotg.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -33,9 +34,15 @@ static struct resource s3c_usb_hsotg_resources[] = { }, }; +static u64 s3c_hsotg_dmamask = DMA_BIT_MASK(32); + struct platform_device s3c_device_usb_hsotg = { .name = "s3c-hsotg", .id = -1, .num_resources = ARRAY_SIZE(s3c_usb_hsotg_resources), .resource = s3c_usb_hsotg_resources, + .dev = { + .dma_mask = &s3c_hsotg_dmamask, + .coherent_dma_mask = DMA_BIT_MASK(32), + }, }; -- cgit v1.2.2 From 4b4c662571bb3a19d6bacb4433886ec35c7093fa Mon Sep 17 00:00:00 2001 From: Jassi Brar Date: Thu, 28 Jan 2010 17:14:49 +0900 Subject: ARM: S3C64XX: SPI: Make platform device compilation selectable The SPI controller platform devices should be compiled in independent of the driver support, otherwise we might end up with dev-spi built as kernel module. Change this to make every machine select if it has some SPI device and wants to build device definitions. Signed-off-by: Jassi Brar Signed-off-by: Ben Dooks --- arch/arm/plat-s3c64xx/Makefile | 4 +++- arch/arm/plat-samsung/Kconfig | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'arch/arm') diff --git a/arch/arm/plat-s3c64xx/Makefile b/arch/arm/plat-s3c64xx/Makefile index 80255a5e1789..e60bde304d86 100644 --- a/arch/arm/plat-s3c64xx/Makefile +++ b/arch/arm/plat-s3c64xx/Makefile @@ -40,6 +40,9 @@ obj-$(CONFIG_S3C64XX_DMA) += dma.o obj-$(CONFIG_S3C_ADC) += dev-adc.o +# SPI support +obj-$(CONFIG_S3C64XX_DEV_SPI) += dev-spi.o + # Device setup obj-$(CONFIG_S3C64XX_SETUP_I2C0) += setup-i2c0.o @@ -47,4 +50,3 @@ obj-$(CONFIG_S3C64XX_SETUP_I2C1) += setup-i2c1.o obj-$(CONFIG_S3C64XX_SETUP_FB_24BPP) += setup-fb-24bpp.o obj-$(CONFIG_S3C64XX_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o obj-$(CONFIG_SND_S3C24XX_SOC) += dev-audio.o -obj-$(CONFIG_SPI_S3C64XX) += dev-spi.o diff --git a/arch/arm/plat-samsung/Kconfig b/arch/arm/plat-samsung/Kconfig index 1c2fe91c23e9..72da6461db12 100644 --- a/arch/arm/plat-samsung/Kconfig +++ b/arch/arm/plat-samsung/Kconfig @@ -132,6 +132,12 @@ config S3C_DEV_NAND help Compile in platform device definition for NAND controller +config S3C64XX_DEV_SPI + bool + help + Compile in platform device definitions for S3C64XX's type + SPI controllers. + comment "Power management" config SAMSUNG_PM_DEBUG -- cgit v1.2.2 From cf9814eb6d83f066d5db63f4144598e9c6ca2951 Mon Sep 17 00:00:00 2001 From: Ben Dooks Date: Fri, 29 Jan 2010 13:03:34 +0900 Subject: ARM: S3C64XX: Make audio device code built unconditionally Making the code depend on CONFIG_SND_S3C24XX_SOC means that if the ASoC code is build modularily, the boards will fail to link due to the device code also being built as a module. As per Mark Brown's suggestions, just compile this always as it is expected many machines will have audio. Also move the obj-y line out of the device setup area into a new area just for devices. Signed-off-by: Ben Dooks --- arch/arm/plat-s3c64xx/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'arch/arm') diff --git a/arch/arm/plat-s3c64xx/Makefile b/arch/arm/plat-s3c64xx/Makefile index e60bde304d86..33a73f3e9f01 100644 --- a/arch/arm/plat-s3c64xx/Makefile +++ b/arch/arm/plat-s3c64xx/Makefile @@ -43,10 +43,13 @@ obj-$(CONFIG_S3C_ADC) += dev-adc.o # SPI support obj-$(CONFIG_S3C64XX_DEV_SPI) += dev-spi.o +# Device support +obj-y += dev-audio.o + # Device setup obj-$(CONFIG_S3C64XX_SETUP_I2C0) += setup-i2c0.o obj-$(CONFIG_S3C64XX_SETUP_I2C1) += setup-i2c1.o obj-$(CONFIG_S3C64XX_SETUP_FB_24BPP) += setup-fb-24bpp.o obj-$(CONFIG_S3C64XX_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o -obj-$(CONFIG_SND_S3C24XX_SOC) += dev-audio.o + -- cgit v1.2.2 From 91492b4a04586e7cb191c72de9d1b22545a3ce16 Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Sat, 30 Jan 2010 18:01:48 +0100 Subject: ARM: SAMSUNG: Add support for 12bit ADC The S3C64XX SoC series support 12bit ADC data, enable this and mask the data accordingly. Signed-off-by: Maurus Cuelenaere Signed-off-by: Ben Dooks --- arch/arm/plat-samsung/adc.c | 24 +++++++++++++++++++----- arch/arm/plat-samsung/include/plat/regs-adc.h | 1 + 2 files changed, 20 insertions(+), 5 deletions(-) (limited to 'arch/arm') diff --git a/arch/arm/plat-samsung/adc.c b/arch/arm/plat-samsung/adc.c index c7659b7378b1..81caf2135721 100644 --- a/arch/arm/plat-samsung/adc.c +++ b/arch/arm/plat-samsung/adc.c @@ -262,6 +262,7 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw) { struct adc_device *adc = pw; struct s3c_adc_client *client = adc->cur; + enum s3c_cpu_type cpu = platform_get_device_id(adc->pdev)->driver_data; unsigned long flags; unsigned data0, data1; @@ -276,9 +277,17 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw) client->nr_samples--; + if (cpu == TYPE_S3C64XX) { + /* S3C64XX ADC resolution is 12-bit */ + data0 &= 0xfff; + data1 &= 0xfff; + } else { + data0 &= 0x3ff; + data1 &= 0x3ff; + } + if (client->convert_cb) - (client->convert_cb)(client, data0 & 0x3ff, data1 & 0x3ff, - &client->nr_samples); + (client->convert_cb)(client, data0, data1, &client->nr_samples); if (client->nr_samples > 0) { /* fire another conversion for this */ @@ -295,7 +304,7 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw) } exit: - if (platform_get_device_id(adc->pdev)->driver_data == TYPE_S3C64XX) { + if (cpu == TYPE_S3C64XX) { /* Clear ADC interrupt */ writel(0, adc->regs + S3C64XX_ADCCLRINT); } @@ -308,6 +317,7 @@ static int s3c_adc_probe(struct platform_device *pdev) struct adc_device *adc; struct resource *regs; int ret; + unsigned tmp; adc = kzalloc(sizeof(struct adc_device), GFP_KERNEL); if (adc == NULL) { @@ -354,8 +364,12 @@ static int s3c_adc_probe(struct platform_device *pdev) clk_enable(adc->clk); - writel(adc->prescale | S3C2410_ADCCON_PRSCEN, - adc->regs + S3C2410_ADCCON); + tmp = adc->prescale | S3C2410_ADCCON_PRSCEN; + if (platform_get_device_id(pdev)->driver_data == TYPE_S3C64XX) { + /* Enable 12-bit ADC resolution */ + tmp |= S3C64XX_ADCCON_RESSEL; + } + writel(tmp, adc->regs + S3C2410_ADCCON); dev_info(dev, "attached adc driver\n"); diff --git a/arch/arm/plat-samsung/include/plat/regs-adc.h b/arch/arm/plat-samsung/include/plat/regs-adc.h index f43c8dab39e4..7554c4fcddb9 100644 --- a/arch/arm/plat-samsung/include/plat/regs-adc.h +++ b/arch/arm/plat-samsung/include/plat/regs-adc.h @@ -25,6 +25,7 @@ /* ADCCON Register Bits */ +#define S3C64XX_ADCCON_RESSEL (1<<16) #define S3C2410_ADCCON_ECFLG (1<<15) #define S3C2410_ADCCON_PRSCEN (1<<14) #define S3C2410_ADCCON_PRSCVL(x) (((x)&0xFF)<<6) -- cgit v1.2.2