Merge branch 'fix' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6 into fixes
This commit is contained in:
commit
78240e3796
@ -82,6 +82,11 @@
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<chapter id="fs_events">
|
||||
<title>Events based on file descriptors</title>
|
||||
!Efs/eventfd.c
|
||||
</chapter>
|
||||
|
||||
<chapter id="sysfs">
|
||||
<title>The Filesystem for Exporting Kernel Objects</title>
|
||||
!Efs/sysfs/file.c
|
||||
|
@ -51,7 +51,8 @@ Supported chips:
|
||||
* JEDEC JC 42.4 compliant temperature sensor chips
|
||||
Prefix: 'jc42'
|
||||
Addresses scanned: I2C 0x18 - 0x1f
|
||||
Datasheet: -
|
||||
Datasheet:
|
||||
http://www.jedec.org/sites/default/files/docs/4_01_04R19.pdf
|
||||
|
||||
Author:
|
||||
Guenter Roeck <guenter.roeck@ericsson.com>
|
||||
@ -60,7 +61,11 @@ Author:
|
||||
Description
|
||||
-----------
|
||||
|
||||
This driver implements support for JEDEC JC 42.4 compliant temperature sensors.
|
||||
This driver implements support for JEDEC JC 42.4 compliant temperature sensors,
|
||||
which are used on many DDR3 memory modules for mobile devices and servers. Some
|
||||
systems use the sensor to prevent memory overheating by automatically throttling
|
||||
the memory controller.
|
||||
|
||||
The driver auto-detects the chips listed above, but can be manually instantiated
|
||||
to support other JC 42.4 compliant chips.
|
||||
|
||||
@ -81,15 +86,19 @@ limits. The chip supports only a single register to configure the hysteresis,
|
||||
which applies to all limits. This register can be written by writing into
|
||||
temp1_crit_hyst. Other hysteresis attributes are read-only.
|
||||
|
||||
If the BIOS has configured the sensor for automatic temperature management, it
|
||||
is likely that it has locked the registers, i.e., that the temperature limits
|
||||
cannot be changed.
|
||||
|
||||
Sysfs entries
|
||||
-------------
|
||||
|
||||
temp1_input Temperature (RO)
|
||||
temp1_min Minimum temperature (RW)
|
||||
temp1_max Maximum temperature (RW)
|
||||
temp1_crit Critical high temperature (RW)
|
||||
temp1_min Minimum temperature (RO or RW)
|
||||
temp1_max Maximum temperature (RO or RW)
|
||||
temp1_crit Critical high temperature (RO or RW)
|
||||
|
||||
temp1_crit_hyst Critical hysteresis temperature (RW)
|
||||
temp1_crit_hyst Critical hysteresis temperature (RO or RW)
|
||||
temp1_max_hyst Maximum hysteresis temperature (RO)
|
||||
|
||||
temp1_min_alarm Temperature low alarm
|
||||
|
@ -9,6 +9,8 @@ Supported chips:
|
||||
Socket S1G3: Athlon II, Sempron, Turion II
|
||||
* AMD Family 11h processors:
|
||||
Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra)
|
||||
* AMD Family 12h processors: "Llano"
|
||||
* AMD Family 14h processors: "Brazos" (C/E/G-Series)
|
||||
|
||||
Prefix: 'k10temp'
|
||||
Addresses scanned: PCI space
|
||||
@ -17,10 +19,14 @@ Supported chips:
|
||||
http://support.amd.com/us/Processor_TechDocs/31116.pdf
|
||||
BIOS and Kernel Developer's Guide (BKDG) for AMD Family 11h Processors:
|
||||
http://support.amd.com/us/Processor_TechDocs/41256.pdf
|
||||
BIOS and Kernel Developer's Guide (BKDG) for AMD Family 14h Models 00h-0Fh Processors:
|
||||
http://support.amd.com/us/Processor_TechDocs/43170.pdf
|
||||
Revision Guide for AMD Family 10h Processors:
|
||||
http://support.amd.com/us/Processor_TechDocs/41322.pdf
|
||||
Revision Guide for AMD Family 11h Processors:
|
||||
http://support.amd.com/us/Processor_TechDocs/41788.pdf
|
||||
Revision Guide for AMD Family 14h Models 00h-0Fh Processors:
|
||||
http://support.amd.com/us/Processor_TechDocs/47534.pdf
|
||||
AMD Family 11h Processor Power and Thermal Data Sheet for Notebooks:
|
||||
http://support.amd.com/us/Processor_TechDocs/43373.pdf
|
||||
AMD Family 10h Server and Workstation Processor Power and Thermal Data Sheet:
|
||||
@ -34,7 +40,7 @@ Description
|
||||
-----------
|
||||
|
||||
This driver permits reading of the internal temperature sensor of AMD
|
||||
Family 10h and 11h processors.
|
||||
Family 10h/11h/12h/14h processors.
|
||||
|
||||
All these processors have a sensor, but on those for Socket F or AM2+,
|
||||
the sensor may return inconsistent values (erratum 319). The driver
|
||||
|
@ -144,6 +144,11 @@ a fixed number of characters. This limit depends on the architecture
|
||||
and is between 256 and 4096 characters. It is defined in the file
|
||||
./include/asm/setup.h as COMMAND_LINE_SIZE.
|
||||
|
||||
Finally, the [KMG] suffix is commonly described after a number of kernel
|
||||
parameter values. These 'K', 'M', and 'G' letters represent the _binary_
|
||||
multipliers 'Kilo', 'Mega', and 'Giga', equalling 2^10, 2^20, and 2^30
|
||||
bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||
|
||||
|
||||
acpi= [HW,ACPI,X86]
|
||||
Advanced Configuration and Power Interface
|
||||
@ -545,16 +550,20 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
Format:
|
||||
<first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>]
|
||||
|
||||
crashkernel=nn[KMG]@ss[KMG]
|
||||
[KNL] Reserve a chunk of physical memory to
|
||||
hold a kernel to switch to with kexec on panic.
|
||||
crashkernel=size[KMG][@offset[KMG]]
|
||||
[KNL] Using kexec, Linux can switch to a 'crash kernel'
|
||||
upon panic. This parameter reserves the physical
|
||||
memory region [offset, offset + size] for that kernel
|
||||
image. If '@offset' is omitted, then a suitable offset
|
||||
is selected automatically. Check
|
||||
Documentation/kdump/kdump.txt for further details.
|
||||
|
||||
crashkernel=range1:size1[,range2:size2,...][@offset]
|
||||
[KNL] Same as above, but depends on the memory
|
||||
in the running system. The syntax of range is
|
||||
start-[end] where start and end are both
|
||||
a memory unit (amount[KMG]). See also
|
||||
Documentation/kdump/kdump.txt for a example.
|
||||
Documentation/kdump/kdump.txt for an example.
|
||||
|
||||
cs89x0_dma= [HW,NET]
|
||||
Format: <dma>
|
||||
@ -1262,10 +1271,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
6 (KERN_INFO) informational
|
||||
7 (KERN_DEBUG) debug-level messages
|
||||
|
||||
log_buf_len=n Sets the size of the printk ring buffer, in bytes.
|
||||
Format: { n | nk | nM }
|
||||
n must be a power of two. The default size
|
||||
is set in the kernel config file.
|
||||
log_buf_len=n[KMG] Sets the size of the printk ring buffer,
|
||||
in bytes. n must be a power of two. The default
|
||||
size is set in the kernel config file.
|
||||
|
||||
logo.nologo [FB] Disables display of the built-in Linux logo.
|
||||
This may be used to provide more screen space for
|
||||
|
@ -885,7 +885,7 @@ S: Supported
|
||||
|
||||
ARM/QUALCOMM MSM MACHINE SUPPORT
|
||||
M: David Brown <davidb@codeaurora.org>
|
||||
M: Daniel Walker <dwalker@codeaurora.org>
|
||||
M: Daniel Walker <dwalker@fifo99.com>
|
||||
M: Bryan Huntsman <bryanh@codeaurora.org>
|
||||
L: linux-arm-msm@vger.kernel.org
|
||||
F: arch/arm/mach-msm/
|
||||
@ -2873,7 +2873,6 @@ M: Guenter Roeck <guenter.roeck@ericsson.com>
|
||||
L: lm-sensors@lm-sensors.org
|
||||
W: http://www.lm-sensors.org/
|
||||
T: quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-hwmon/
|
||||
T: quilt kernel.org/pub/linux/kernel/people/groeck/linux-staging/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
|
||||
S: Maintained
|
||||
F: Documentation/hwmon/
|
||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 38
|
||||
EXTRAVERSION = -rc5
|
||||
EXTRAVERSION = -rc6
|
||||
NAME = Flesh-Eating Bats with Fangs
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -347,6 +347,7 @@ static struct platform_device *pxa25x_devices[] __initdata = {
|
||||
&pxa25x_device_assp,
|
||||
&pxa25x_device_pwm0,
|
||||
&pxa25x_device_pwm1,
|
||||
&pxa_device_asoc_platform,
|
||||
};
|
||||
|
||||
static struct sys_device pxa25x_sysdev[] = {
|
||||
|
@ -81,8 +81,6 @@ static int tosa_bt_probe(struct platform_device *dev)
|
||||
goto err_rfk_alloc;
|
||||
}
|
||||
|
||||
rfkill_set_led_trigger_name(rfk, "tosa-bt");
|
||||
|
||||
rc = rfkill_register(rfk);
|
||||
if (rc)
|
||||
goto err_rfkill;
|
||||
|
@ -875,6 +875,11 @@ static struct platform_device sharpsl_rom_device = {
|
||||
.dev.platform_data = &sharpsl_rom_data,
|
||||
};
|
||||
|
||||
static struct platform_device wm9712_device = {
|
||||
.name = "wm9712-codec",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&tosascoop_device,
|
||||
&tosascoop_jc_device,
|
||||
@ -885,6 +890,7 @@ static struct platform_device *devices[] __initdata = {
|
||||
&tosaled_device,
|
||||
&tosa_bt_device,
|
||||
&sharpsl_rom_device,
|
||||
&wm9712_device,
|
||||
};
|
||||
|
||||
static void tosa_poweroff(void)
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* linux/arch/arm/mach-s5p6442/include/mach/map.h
|
||||
*
|
||||
* Copyright (c) 2010 Samsung Electronics Co., Ltd.
|
||||
* Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com/
|
||||
*
|
||||
* S5P6442 - Memory map definitions
|
||||
@ -16,56 +16,61 @@
|
||||
#include <plat/map-base.h>
|
||||
#include <plat/map-s5p.h>
|
||||
|
||||
#define S5P6442_PA_CHIPID (0xE0000000)
|
||||
#define S5P_PA_CHIPID S5P6442_PA_CHIPID
|
||||
#define S5P6442_PA_SDRAM 0x20000000
|
||||
|
||||
#define S5P6442_PA_SYSCON (0xE0100000)
|
||||
#define S5P_PA_SYSCON S5P6442_PA_SYSCON
|
||||
#define S5P6442_PA_I2S0 0xC0B00000
|
||||
#define S5P6442_PA_I2S1 0xF2200000
|
||||
|
||||
#define S5P6442_PA_GPIO (0xE0200000)
|
||||
#define S5P6442_PA_CHIPID 0xE0000000
|
||||
|
||||
#define S5P6442_PA_VIC0 (0xE4000000)
|
||||
#define S5P6442_PA_VIC1 (0xE4100000)
|
||||
#define S5P6442_PA_VIC2 (0xE4200000)
|
||||
#define S5P6442_PA_SYSCON 0xE0100000
|
||||
|
||||
#define S5P6442_PA_SROMC (0xE7000000)
|
||||
#define S5P_PA_SROMC S5P6442_PA_SROMC
|
||||
#define S5P6442_PA_GPIO 0xE0200000
|
||||
|
||||
#define S5P6442_PA_VIC0 0xE4000000
|
||||
#define S5P6442_PA_VIC1 0xE4100000
|
||||
#define S5P6442_PA_VIC2 0xE4200000
|
||||
|
||||
#define S5P6442_PA_SROMC 0xE7000000
|
||||
|
||||
#define S5P6442_PA_MDMA 0xE8000000
|
||||
#define S5P6442_PA_PDMA 0xE9000000
|
||||
|
||||
#define S5P6442_PA_TIMER (0xEA000000)
|
||||
#define S5P_PA_TIMER S5P6442_PA_TIMER
|
||||
#define S5P6442_PA_TIMER 0xEA000000
|
||||
|
||||
#define S5P6442_PA_SYSTIMER (0xEA100000)
|
||||
#define S5P6442_PA_SYSTIMER 0xEA100000
|
||||
|
||||
#define S5P6442_PA_WATCHDOG (0xEA200000)
|
||||
#define S5P6442_PA_WATCHDOG 0xEA200000
|
||||
|
||||
#define S5P6442_PA_UART (0xEC000000)
|
||||
#define S5P6442_PA_UART 0xEC000000
|
||||
|
||||
#define S5P_PA_UART0 (S5P6442_PA_UART + 0x0)
|
||||
#define S5P_PA_UART1 (S5P6442_PA_UART + 0x400)
|
||||
#define S5P_PA_UART2 (S5P6442_PA_UART + 0x800)
|
||||
#define S5P_SZ_UART SZ_256
|
||||
|
||||
#define S5P6442_PA_IIC0 (0xEC100000)
|
||||
|
||||
#define S5P6442_PA_SDRAM (0x20000000)
|
||||
#define S5P_PA_SDRAM S5P6442_PA_SDRAM
|
||||
#define S5P6442_PA_IIC0 0xEC100000
|
||||
|
||||
#define S5P6442_PA_SPI 0xEC300000
|
||||
|
||||
/* I2S */
|
||||
#define S5P6442_PA_I2S0 0xC0B00000
|
||||
#define S5P6442_PA_I2S1 0xF2200000
|
||||
|
||||
/* PCM */
|
||||
#define S5P6442_PA_PCM0 0xF2400000
|
||||
#define S5P6442_PA_PCM1 0xF2500000
|
||||
|
||||
/* compatibiltiy defines. */
|
||||
#define S3C_PA_WDT S5P6442_PA_WATCHDOG
|
||||
#define S3C_PA_UART S5P6442_PA_UART
|
||||
/* Compatibiltiy Defines */
|
||||
|
||||
#define S3C_PA_IIC S5P6442_PA_IIC0
|
||||
#define S3C_PA_WDT S5P6442_PA_WATCHDOG
|
||||
|
||||
#define S5P_PA_CHIPID S5P6442_PA_CHIPID
|
||||
#define S5P_PA_SDRAM S5P6442_PA_SDRAM
|
||||
#define S5P_PA_SROMC S5P6442_PA_SROMC
|
||||
#define S5P_PA_SYSCON S5P6442_PA_SYSCON
|
||||
#define S5P_PA_TIMER S5P6442_PA_TIMER
|
||||
|
||||
/* UART */
|
||||
|
||||
#define S3C_PA_UART S5P6442_PA_UART
|
||||
|
||||
#define S5P_PA_UART(x) (S3C_PA_UART + ((x) * S3C_UART_OFFSET))
|
||||
#define S5P_PA_UART0 S5P_PA_UART(0)
|
||||
#define S5P_PA_UART1 S5P_PA_UART(1)
|
||||
#define S5P_PA_UART2 S5P_PA_UART(2)
|
||||
|
||||
#define S5P_SZ_UART SZ_256
|
||||
|
||||
#endif /* __ASM_ARCH_MAP_H */
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* linux/arch/arm/mach-s5p64x0/include/mach/map.h
|
||||
*
|
||||
* Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
|
||||
* Copyright (c) 2009-2011 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com
|
||||
*
|
||||
* S5P64X0 - Memory map definitions
|
||||
@ -16,30 +16,63 @@
|
||||
#include <plat/map-base.h>
|
||||
#include <plat/map-s5p.h>
|
||||
|
||||
#define S5P64X0_PA_SDRAM (0x20000000)
|
||||
#define S5P64X0_PA_SDRAM 0x20000000
|
||||
|
||||
#define S5P64X0_PA_CHIPID 0xE0000000
|
||||
|
||||
#define S5P64X0_PA_SYSCON 0xE0100000
|
||||
|
||||
#define S5P64X0_PA_GPIO 0xE0308000
|
||||
|
||||
#define S5P64X0_PA_VIC0 0xE4000000
|
||||
#define S5P64X0_PA_VIC1 0xE4100000
|
||||
|
||||
#define S5P64X0_PA_SROMC 0xE7000000
|
||||
|
||||
#define S5P64X0_PA_PDMA 0xE9000000
|
||||
|
||||
#define S5P64X0_PA_TIMER 0xEA000000
|
||||
#define S5P64X0_PA_RTC 0xEA100000
|
||||
#define S5P64X0_PA_WDT 0xEA200000
|
||||
|
||||
#define S5P6440_PA_IIC0 0xEC104000
|
||||
#define S5P6440_PA_IIC1 0xEC20F000
|
||||
#define S5P6450_PA_IIC0 0xEC100000
|
||||
#define S5P6450_PA_IIC1 0xEC200000
|
||||
|
||||
#define S5P64X0_PA_SPI0 0xEC400000
|
||||
#define S5P64X0_PA_SPI1 0xEC500000
|
||||
|
||||
#define S5P64X0_PA_HSOTG 0xED100000
|
||||
|
||||
#define S5P64X0_PA_HSMMC(x) (0xED800000 + ((x) * 0x100000))
|
||||
|
||||
#define S5P64X0_PA_I2S 0xF2000000
|
||||
#define S5P6450_PA_I2S1 0xF2800000
|
||||
#define S5P6450_PA_I2S2 0xF2900000
|
||||
|
||||
#define S5P64X0_PA_PCM 0xF2100000
|
||||
|
||||
#define S5P64X0_PA_ADC 0xF3000000
|
||||
|
||||
/* Compatibiltiy Defines */
|
||||
|
||||
#define S3C_PA_HSMMC0 S5P64X0_PA_HSMMC(0)
|
||||
#define S3C_PA_HSMMC1 S5P64X0_PA_HSMMC(1)
|
||||
#define S3C_PA_HSMMC2 S5P64X0_PA_HSMMC(2)
|
||||
#define S3C_PA_IIC S5P6440_PA_IIC0
|
||||
#define S3C_PA_IIC1 S5P6440_PA_IIC1
|
||||
#define S3C_PA_RTC S5P64X0_PA_RTC
|
||||
#define S3C_PA_WDT S5P64X0_PA_WDT
|
||||
|
||||
#define S5P64X0_PA_CHIPID (0xE0000000)
|
||||
#define S5P_PA_CHIPID S5P64X0_PA_CHIPID
|
||||
|
||||
#define S5P64X0_PA_SYSCON (0xE0100000)
|
||||
#define S5P_PA_SYSCON S5P64X0_PA_SYSCON
|
||||
|
||||
#define S5P64X0_PA_GPIO (0xE0308000)
|
||||
|
||||
#define S5P64X0_PA_VIC0 (0xE4000000)
|
||||
#define S5P64X0_PA_VIC1 (0xE4100000)
|
||||
|
||||
#define S5P64X0_PA_SROMC (0xE7000000)
|
||||
#define S5P_PA_SROMC S5P64X0_PA_SROMC
|
||||
|
||||
#define S5P64X0_PA_PDMA (0xE9000000)
|
||||
|
||||
#define S5P64X0_PA_TIMER (0xEA000000)
|
||||
#define S5P_PA_SYSCON S5P64X0_PA_SYSCON
|
||||
#define S5P_PA_TIMER S5P64X0_PA_TIMER
|
||||
|
||||
#define S5P64X0_PA_RTC (0xEA100000)
|
||||
#define SAMSUNG_PA_ADC S5P64X0_PA_ADC
|
||||
|
||||
#define S5P64X0_PA_WDT (0xEA200000)
|
||||
/* UART */
|
||||
|
||||
#define S5P6440_PA_UART(x) (0xEC000000 + ((x) * S3C_UART_OFFSET))
|
||||
#define S5P6450_PA_UART(x) ((x < 5) ? (0xEC800000 + ((x) * S3C_UART_OFFSET)) : (0xEC000000))
|
||||
@ -53,36 +86,4 @@
|
||||
|
||||
#define S5P_SZ_UART SZ_256
|
||||
|
||||
#define S5P6440_PA_IIC0 (0xEC104000)
|
||||
#define S5P6440_PA_IIC1 (0xEC20F000)
|
||||
#define S5P6450_PA_IIC0 (0xEC100000)
|
||||
#define S5P6450_PA_IIC1 (0xEC200000)
|
||||
|
||||
#define S5P64X0_PA_SPI0 (0xEC400000)
|
||||
#define S5P64X0_PA_SPI1 (0xEC500000)
|
||||
|
||||
#define S5P64X0_PA_HSOTG (0xED100000)
|
||||
|
||||
#define S5P64X0_PA_HSMMC(x) (0xED800000 + ((x) * 0x100000))
|
||||
|
||||
#define S5P64X0_PA_I2S (0xF2000000)
|
||||
#define S5P6450_PA_I2S1 0xF2800000
|
||||
#define S5P6450_PA_I2S2 0xF2900000
|
||||
|
||||
#define S5P64X0_PA_PCM (0xF2100000)
|
||||
|
||||
#define S5P64X0_PA_ADC (0xF3000000)
|
||||
|
||||
/* compatibiltiy defines. */
|
||||
|
||||
#define S3C_PA_HSMMC0 S5P64X0_PA_HSMMC(0)
|
||||
#define S3C_PA_HSMMC1 S5P64X0_PA_HSMMC(1)
|
||||
#define S3C_PA_HSMMC2 S5P64X0_PA_HSMMC(2)
|
||||
#define S3C_PA_IIC S5P6440_PA_IIC0
|
||||
#define S3C_PA_IIC1 S5P6440_PA_IIC1
|
||||
#define S3C_PA_RTC S5P64X0_PA_RTC
|
||||
#define S3C_PA_WDT S5P64X0_PA_WDT
|
||||
|
||||
#define SAMSUNG_PA_ADC S5P64X0_PA_ADC
|
||||
|
||||
#endif /* __ASM_ARCH_MAP_H */
|
||||
|
@ -1,4 +1,7 @@
|
||||
/* linux/arch/arm/mach-s5pc100/include/mach/map.h
|
||||
*
|
||||
* Copyright (c) 2011 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com/
|
||||
*
|
||||
* Copyright 2009 Samsung Electronics Co.
|
||||
* Byungho Min <bhmin@samsung.com>
|
||||
@ -16,145 +19,115 @@
|
||||
#include <plat/map-base.h>
|
||||
#include <plat/map-s5p.h>
|
||||
|
||||
/*
|
||||
* map-base.h has already defined virtual memory address
|
||||
* S3C_VA_IRQ S3C_ADDR(0x00000000) irq controller(s)
|
||||
* S3C_VA_SYS S3C_ADDR(0x00100000) system control
|
||||
* S3C_VA_MEM S3C_ADDR(0x00200000) system control (not used)
|
||||
* S3C_VA_TIMER S3C_ADDR(0x00300000) timer block
|
||||
* S3C_VA_WATCHDOG S3C_ADDR(0x00400000) watchdog
|
||||
* S3C_VA_UART S3C_ADDR(0x01000000) UART
|
||||
*
|
||||
* S5PC100 specific virtual memory address can be defined here
|
||||
* S5PC1XX_VA_GPIO S3C_ADDR(0x00500000) GPIO
|
||||
*
|
||||
*/
|
||||
#define S5PC100_PA_SDRAM 0x20000000
|
||||
|
||||
#define S5PC100_PA_ONENAND_BUF (0xB0000000)
|
||||
#define S5PC100_SZ_ONENAND_BUF (SZ_256M - SZ_32M)
|
||||
#define S5PC100_PA_ONENAND 0xE7100000
|
||||
#define S5PC100_PA_ONENAND_BUF 0xB0000000
|
||||
|
||||
/* Chip ID */
|
||||
#define S5PC100_PA_CHIPID 0xE0000000
|
||||
|
||||
#define S5PC100_PA_CHIPID (0xE0000000)
|
||||
#define S5P_PA_CHIPID S5PC100_PA_CHIPID
|
||||
#define S5PC100_PA_SYSCON 0xE0100000
|
||||
|
||||
#define S5PC100_PA_SYSCON (0xE0100000)
|
||||
#define S5P_PA_SYSCON S5PC100_PA_SYSCON
|
||||
#define S5PC100_PA_OTHERS 0xE0200000
|
||||
|
||||
#define S5PC100_PA_OTHERS (0xE0200000)
|
||||
#define S5PC100_VA_OTHERS (S3C_VA_SYS + 0x10000)
|
||||
#define S5PC100_PA_GPIO 0xE0300000
|
||||
|
||||
#define S5PC100_PA_GPIO (0xE0300000)
|
||||
#define S5PC1XX_VA_GPIO S3C_ADDR(0x00500000)
|
||||
#define S5PC100_PA_VIC0 0xE4000000
|
||||
#define S5PC100_PA_VIC1 0xE4100000
|
||||
#define S5PC100_PA_VIC2 0xE4200000
|
||||
|
||||
/* Interrupt */
|
||||
#define S5PC100_PA_VIC0 (0xE4000000)
|
||||
#define S5PC100_PA_VIC1 (0xE4100000)
|
||||
#define S5PC100_PA_VIC2 (0xE4200000)
|
||||
#define S5PC100_VA_VIC S3C_VA_IRQ
|
||||
#define S5PC100_VA_VIC_OFFSET 0x10000
|
||||
#define S5PC1XX_VA_VIC(x) (S5PC100_VA_VIC + ((x) * S5PC100_VA_VIC_OFFSET))
|
||||
#define S5PC100_PA_SROMC 0xE7000000
|
||||
|
||||
#define S5PC100_PA_SROMC (0xE7000000)
|
||||
#define S5P_PA_SROMC S5PC100_PA_SROMC
|
||||
#define S5PC100_PA_CFCON 0xE7800000
|
||||
|
||||
#define S5PC100_PA_ONENAND (0xE7100000)
|
||||
#define S5PC100_PA_MDMA 0xE8100000
|
||||
#define S5PC100_PA_PDMA0 0xE9000000
|
||||
#define S5PC100_PA_PDMA1 0xE9200000
|
||||
|
||||
#define S5PC100_PA_CFCON (0xE7800000)
|
||||
#define S5PC100_PA_TIMER 0xEA000000
|
||||
#define S5PC100_PA_SYSTIMER 0xEA100000
|
||||
#define S5PC100_PA_WATCHDOG 0xEA200000
|
||||
#define S5PC100_PA_RTC 0xEA300000
|
||||
|
||||
/* DMA */
|
||||
#define S5PC100_PA_MDMA (0xE8100000)
|
||||
#define S5PC100_PA_PDMA0 (0xE9000000)
|
||||
#define S5PC100_PA_PDMA1 (0xE9200000)
|
||||
#define S5PC100_PA_UART 0xEC000000
|
||||
|
||||
/* Timer */
|
||||
#define S5PC100_PA_TIMER (0xEA000000)
|
||||
#define S5P_PA_TIMER S5PC100_PA_TIMER
|
||||
#define S5PC100_PA_IIC0 0xEC100000
|
||||
#define S5PC100_PA_IIC1 0xEC200000
|
||||
|
||||
#define S5PC100_PA_SYSTIMER (0xEA100000)
|
||||
#define S5PC100_PA_SPI0 0xEC300000
|
||||
#define S5PC100_PA_SPI1 0xEC400000
|
||||
#define S5PC100_PA_SPI2 0xEC500000
|
||||
|
||||
#define S5PC100_PA_WATCHDOG (0xEA200000)
|
||||
#define S5PC100_PA_RTC (0xEA300000)
|
||||
#define S5PC100_PA_USB_HSOTG 0xED200000
|
||||
#define S5PC100_PA_USB_HSPHY 0xED300000
|
||||
|
||||
#define S5PC100_PA_UART (0xEC000000)
|
||||
#define S5PC100_PA_HSMMC(x) (0xED800000 + ((x) * 0x100000))
|
||||
|
||||
#define S5P_PA_UART0 (S5PC100_PA_UART + 0x0)
|
||||
#define S5P_PA_UART1 (S5PC100_PA_UART + 0x400)
|
||||
#define S5P_PA_UART2 (S5PC100_PA_UART + 0x800)
|
||||
#define S5P_PA_UART3 (S5PC100_PA_UART + 0xC00)
|
||||
#define S5P_SZ_UART SZ_256
|
||||
#define S5PC100_PA_FB 0xEE000000
|
||||
|
||||
#define S5PC100_PA_IIC0 (0xEC100000)
|
||||
#define S5PC100_PA_IIC1 (0xEC200000)
|
||||
#define S5PC100_PA_FIMC0 0xEE200000
|
||||
#define S5PC100_PA_FIMC1 0xEE300000
|
||||
#define S5PC100_PA_FIMC2 0xEE400000
|
||||
|
||||
/* SPI */
|
||||
#define S5PC100_PA_SPI0 0xEC300000
|
||||
#define S5PC100_PA_SPI1 0xEC400000
|
||||
#define S5PC100_PA_SPI2 0xEC500000
|
||||
#define S5PC100_PA_I2S0 0xF2000000
|
||||
#define S5PC100_PA_I2S1 0xF2100000
|
||||
#define S5PC100_PA_I2S2 0xF2200000
|
||||
|
||||
/* USB HS OTG */
|
||||
#define S5PC100_PA_USB_HSOTG (0xED200000)
|
||||
#define S5PC100_PA_USB_HSPHY (0xED300000)
|
||||
#define S5PC100_PA_AC97 0xF2300000
|
||||
|
||||
#define S5PC100_PA_FB (0xEE000000)
|
||||
#define S5PC100_PA_PCM0 0xF2400000
|
||||
#define S5PC100_PA_PCM1 0xF2500000
|
||||
|
||||
#define S5PC100_PA_FIMC0 (0xEE200000)
|
||||
#define S5PC100_PA_FIMC1 (0xEE300000)
|
||||
#define S5PC100_PA_FIMC2 (0xEE400000)
|
||||
#define S5PC100_PA_SPDIF 0xF2600000
|
||||
|
||||
#define S5PC100_PA_I2S0 (0xF2000000)
|
||||
#define S5PC100_PA_I2S1 (0xF2100000)
|
||||
#define S5PC100_PA_I2S2 (0xF2200000)
|
||||
#define S5PC100_PA_TSADC 0xF3000000
|
||||
|
||||
#define S5PC100_PA_AC97 0xF2300000
|
||||
#define S5PC100_PA_KEYPAD 0xF3100000
|
||||
|
||||
/* PCM */
|
||||
#define S5PC100_PA_PCM0 0xF2400000
|
||||
#define S5PC100_PA_PCM1 0xF2500000
|
||||
/* Compatibiltiy Defines */
|
||||
|
||||
#define S5PC100_PA_SPDIF 0xF2600000
|
||||
#define S3C_PA_FB S5PC100_PA_FB
|
||||
#define S3C_PA_HSMMC0 S5PC100_PA_HSMMC(0)
|
||||
#define S3C_PA_HSMMC1 S5PC100_PA_HSMMC(1)
|
||||
#define S3C_PA_HSMMC2 S5PC100_PA_HSMMC(2)
|
||||
#define S3C_PA_IIC S5PC100_PA_IIC0
|
||||
#define S3C_PA_IIC1 S5PC100_PA_IIC1
|
||||
#define S3C_PA_KEYPAD S5PC100_PA_KEYPAD
|
||||
#define S3C_PA_ONENAND S5PC100_PA_ONENAND
|
||||
#define S3C_PA_ONENAND_BUF S5PC100_PA_ONENAND_BUF
|
||||
#define S3C_PA_RTC S5PC100_PA_RTC
|
||||
#define S3C_PA_TSADC S5PC100_PA_TSADC
|
||||
#define S3C_PA_USB_HSOTG S5PC100_PA_USB_HSOTG
|
||||
#define S3C_PA_USB_HSPHY S5PC100_PA_USB_HSPHY
|
||||
#define S3C_PA_WDT S5PC100_PA_WATCHDOG
|
||||
|
||||
#define S5PC100_PA_TSADC (0xF3000000)
|
||||
#define S5P_PA_CHIPID S5PC100_PA_CHIPID
|
||||
#define S5P_PA_FIMC0 S5PC100_PA_FIMC0
|
||||
#define S5P_PA_FIMC1 S5PC100_PA_FIMC1
|
||||
#define S5P_PA_FIMC2 S5PC100_PA_FIMC2
|
||||
#define S5P_PA_SDRAM S5PC100_PA_SDRAM
|
||||
#define S5P_PA_SROMC S5PC100_PA_SROMC
|
||||
#define S5P_PA_SYSCON S5PC100_PA_SYSCON
|
||||
#define S5P_PA_TIMER S5PC100_PA_TIMER
|
||||
|
||||
/* KEYPAD */
|
||||
#define S5PC100_PA_KEYPAD (0xF3100000)
|
||||
#define SAMSUNG_PA_ADC S5PC100_PA_TSADC
|
||||
#define SAMSUNG_PA_CFCON S5PC100_PA_CFCON
|
||||
#define SAMSUNG_PA_KEYPAD S5PC100_PA_KEYPAD
|
||||
|
||||
#define S5PC100_PA_HSMMC(x) (0xED800000 + ((x) * 0x100000))
|
||||
#define S5PC100_VA_OTHERS (S3C_VA_SYS + 0x10000)
|
||||
|
||||
#define S5PC100_PA_SDRAM (0x20000000)
|
||||
#define S5P_PA_SDRAM S5PC100_PA_SDRAM
|
||||
#define S3C_SZ_ONENAND_BUF (SZ_256M - SZ_32M)
|
||||
|
||||
/* compatibiltiy defines. */
|
||||
#define S3C_PA_UART S5PC100_PA_UART
|
||||
#define S3C_PA_IIC S5PC100_PA_IIC0
|
||||
#define S3C_PA_IIC1 S5PC100_PA_IIC1
|
||||
#define S3C_PA_FB S5PC100_PA_FB
|
||||
#define S3C_PA_G2D S5PC100_PA_G2D
|
||||
#define S3C_PA_G3D S5PC100_PA_G3D
|
||||
#define S3C_PA_JPEG S5PC100_PA_JPEG
|
||||
#define S3C_PA_ROTATOR S5PC100_PA_ROTATOR
|
||||
#define S5P_VA_VIC0 S5PC1XX_VA_VIC(0)
|
||||
#define S5P_VA_VIC1 S5PC1XX_VA_VIC(1)
|
||||
#define S5P_VA_VIC2 S5PC1XX_VA_VIC(2)
|
||||
#define S3C_PA_USB_HSOTG S5PC100_PA_USB_HSOTG
|
||||
#define S3C_PA_USB_HSPHY S5PC100_PA_USB_HSPHY
|
||||
#define S3C_PA_HSMMC0 S5PC100_PA_HSMMC(0)
|
||||
#define S3C_PA_HSMMC1 S5PC100_PA_HSMMC(1)
|
||||
#define S3C_PA_HSMMC2 S5PC100_PA_HSMMC(2)
|
||||
#define S3C_PA_KEYPAD S5PC100_PA_KEYPAD
|
||||
#define S3C_PA_WDT S5PC100_PA_WATCHDOG
|
||||
#define S3C_PA_TSADC S5PC100_PA_TSADC
|
||||
#define S3C_PA_ONENAND S5PC100_PA_ONENAND
|
||||
#define S3C_PA_ONENAND_BUF S5PC100_PA_ONENAND_BUF
|
||||
#define S3C_SZ_ONENAND_BUF S5PC100_SZ_ONENAND_BUF
|
||||
#define S3C_PA_RTC S5PC100_PA_RTC
|
||||
/* UART */
|
||||
|
||||
#define SAMSUNG_PA_ADC S5PC100_PA_TSADC
|
||||
#define SAMSUNG_PA_CFCON S5PC100_PA_CFCON
|
||||
#define SAMSUNG_PA_KEYPAD S5PC100_PA_KEYPAD
|
||||
#define S3C_PA_UART S5PC100_PA_UART
|
||||
|
||||
#define S5P_PA_FIMC0 S5PC100_PA_FIMC0
|
||||
#define S5P_PA_FIMC1 S5PC100_PA_FIMC1
|
||||
#define S5P_PA_FIMC2 S5PC100_PA_FIMC2
|
||||
#define S5P_PA_UART(x) (S3C_PA_UART + ((x) * S3C_UART_OFFSET))
|
||||
#define S5P_PA_UART0 S5P_PA_UART(0)
|
||||
#define S5P_PA_UART1 S5P_PA_UART(1)
|
||||
#define S5P_PA_UART2 S5P_PA_UART(2)
|
||||
#define S5P_PA_UART3 S5P_PA_UART(3)
|
||||
|
||||
#endif /* __ASM_ARCH_C100_MAP_H */
|
||||
#define S5P_SZ_UART SZ_256
|
||||
|
||||
#endif /* __ASM_ARCH_MAP_H */
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* linux/arch/arm/mach-s5pv210/include/mach/map.h
|
||||
*
|
||||
* Copyright (c) 2010 Samsung Electronics Co., Ltd.
|
||||
* Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com/
|
||||
*
|
||||
* S5PV210 - Memory map definitions
|
||||
@ -16,122 +16,120 @@
|
||||
#include <plat/map-base.h>
|
||||
#include <plat/map-s5p.h>
|
||||
|
||||
#define S5PV210_PA_SROM_BANK5 (0xA8000000)
|
||||
#define S5PV210_PA_SDRAM 0x20000000
|
||||
|
||||
#define S5PC110_PA_ONENAND (0xB0000000)
|
||||
#define S5P_PA_ONENAND S5PC110_PA_ONENAND
|
||||
#define S5PV210_PA_SROM_BANK5 0xA8000000
|
||||
|
||||
#define S5PC110_PA_ONENAND_DMA (0xB0600000)
|
||||
#define S5P_PA_ONENAND_DMA S5PC110_PA_ONENAND_DMA
|
||||
#define S5PC110_PA_ONENAND 0xB0000000
|
||||
#define S5PC110_PA_ONENAND_DMA 0xB0600000
|
||||
|
||||
#define S5PV210_PA_CHIPID (0xE0000000)
|
||||
#define S5P_PA_CHIPID S5PV210_PA_CHIPID
|
||||
#define S5PV210_PA_CHIPID 0xE0000000
|
||||
|
||||
#define S5PV210_PA_SYSCON (0xE0100000)
|
||||
#define S5P_PA_SYSCON S5PV210_PA_SYSCON
|
||||
#define S5PV210_PA_SYSCON 0xE0100000
|
||||
|
||||
#define S5PV210_PA_GPIO (0xE0200000)
|
||||
#define S5PV210_PA_GPIO 0xE0200000
|
||||
|
||||
/* SPI */
|
||||
#define S5PV210_PA_SPI0 0xE1300000
|
||||
#define S5PV210_PA_SPI1 0xE1400000
|
||||
#define S5PV210_PA_SPDIF 0xE1100000
|
||||
|
||||
#define S5PV210_PA_KEYPAD (0xE1600000)
|
||||
#define S5PV210_PA_SPI0 0xE1300000
|
||||
#define S5PV210_PA_SPI1 0xE1400000
|
||||
|
||||
#define S5PV210_PA_IIC0 (0xE1800000)
|
||||
#define S5PV210_PA_IIC1 (0xFAB00000)
|
||||
#define S5PV210_PA_IIC2 (0xE1A00000)
|
||||
#define S5PV210_PA_KEYPAD 0xE1600000
|
||||
|
||||
#define S5PV210_PA_TIMER (0xE2500000)
|
||||
#define S5P_PA_TIMER S5PV210_PA_TIMER
|
||||
#define S5PV210_PA_ADC 0xE1700000
|
||||
|
||||
#define S5PV210_PA_SYSTIMER (0xE2600000)
|
||||
#define S5PV210_PA_IIC0 0xE1800000
|
||||
#define S5PV210_PA_IIC1 0xFAB00000
|
||||
#define S5PV210_PA_IIC2 0xE1A00000
|
||||
|
||||
#define S5PV210_PA_WATCHDOG (0xE2700000)
|
||||
#define S5PV210_PA_AC97 0xE2200000
|
||||
|
||||
#define S5PV210_PA_RTC (0xE2800000)
|
||||
#define S5PV210_PA_UART (0xE2900000)
|
||||
#define S5PV210_PA_PCM0 0xE2300000
|
||||
#define S5PV210_PA_PCM1 0xE1200000
|
||||
#define S5PV210_PA_PCM2 0xE2B00000
|
||||
|
||||
#define S5P_PA_UART0 (S5PV210_PA_UART + 0x0)
|
||||
#define S5P_PA_UART1 (S5PV210_PA_UART + 0x400)
|
||||
#define S5P_PA_UART2 (S5PV210_PA_UART + 0x800)
|
||||
#define S5P_PA_UART3 (S5PV210_PA_UART + 0xC00)
|
||||
#define S5PV210_PA_TIMER 0xE2500000
|
||||
#define S5PV210_PA_SYSTIMER 0xE2600000
|
||||
#define S5PV210_PA_WATCHDOG 0xE2700000
|
||||
#define S5PV210_PA_RTC 0xE2800000
|
||||
|
||||
#define S5P_SZ_UART SZ_256
|
||||
#define S5PV210_PA_UART 0xE2900000
|
||||
|
||||
#define S3C_VA_UARTx(x) (S3C_VA_UART + ((x) * S3C_UART_OFFSET))
|
||||
#define S5PV210_PA_SROMC 0xE8000000
|
||||
|
||||
#define S5PV210_PA_SROMC (0xE8000000)
|
||||
#define S5P_PA_SROMC S5PV210_PA_SROMC
|
||||
#define S5PV210_PA_CFCON 0xE8200000
|
||||
|
||||
#define S5PV210_PA_CFCON (0xE8200000)
|
||||
#define S5PV210_PA_HSMMC(x) (0xEB000000 + ((x) * 0x100000))
|
||||
|
||||
#define S5PV210_PA_MDMA 0xFA200000
|
||||
#define S5PV210_PA_PDMA0 0xE0900000
|
||||
#define S5PV210_PA_PDMA1 0xE0A00000
|
||||
#define S5PV210_PA_HSOTG 0xEC000000
|
||||
#define S5PV210_PA_HSPHY 0xEC100000
|
||||
|
||||
#define S5PV210_PA_FB (0xF8000000)
|
||||
#define S5PV210_PA_IIS0 0xEEE30000
|
||||
#define S5PV210_PA_IIS1 0xE2100000
|
||||
#define S5PV210_PA_IIS2 0xE2A00000
|
||||
|
||||
#define S5PV210_PA_FIMC0 (0xFB200000)
|
||||
#define S5PV210_PA_FIMC1 (0xFB300000)
|
||||
#define S5PV210_PA_FIMC2 (0xFB400000)
|
||||
#define S5PV210_PA_DMC0 0xF0000000
|
||||
#define S5PV210_PA_DMC1 0xF1400000
|
||||
|
||||
#define S5PV210_PA_HSMMC(x) (0xEB000000 + ((x) * 0x100000))
|
||||
#define S5PV210_PA_VIC0 0xF2000000
|
||||
#define S5PV210_PA_VIC1 0xF2100000
|
||||
#define S5PV210_PA_VIC2 0xF2200000
|
||||
#define S5PV210_PA_VIC3 0xF2300000
|
||||
|
||||
#define S5PV210_PA_HSOTG (0xEC000000)
|
||||
#define S5PV210_PA_HSPHY (0xEC100000)
|
||||
#define S5PV210_PA_FB 0xF8000000
|
||||
|
||||
#define S5PV210_PA_VIC0 (0xF2000000)
|
||||
#define S5PV210_PA_VIC1 (0xF2100000)
|
||||
#define S5PV210_PA_VIC2 (0xF2200000)
|
||||
#define S5PV210_PA_VIC3 (0xF2300000)
|
||||
#define S5PV210_PA_MDMA 0xFA200000
|
||||
#define S5PV210_PA_PDMA0 0xE0900000
|
||||
#define S5PV210_PA_PDMA1 0xE0A00000
|
||||
|
||||
#define S5PV210_PA_SDRAM (0x20000000)
|
||||
#define S5P_PA_SDRAM S5PV210_PA_SDRAM
|
||||
#define S5PV210_PA_MIPI_CSIS 0xFA600000
|
||||
|
||||
/* S/PDIF */
|
||||
#define S5PV210_PA_SPDIF 0xE1100000
|
||||
#define S5PV210_PA_FIMC0 0xFB200000
|
||||
#define S5PV210_PA_FIMC1 0xFB300000
|
||||
#define S5PV210_PA_FIMC2 0xFB400000
|
||||
|
||||
/* I2S */
|
||||
#define S5PV210_PA_IIS0 0xEEE30000
|
||||
#define S5PV210_PA_IIS1 0xE2100000
|
||||
#define S5PV210_PA_IIS2 0xE2A00000
|
||||
/* Compatibiltiy Defines */
|
||||
|
||||
/* PCM */
|
||||
#define S5PV210_PA_PCM0 0xE2300000
|
||||
#define S5PV210_PA_PCM1 0xE1200000
|
||||
#define S5PV210_PA_PCM2 0xE2B00000
|
||||
#define S3C_PA_FB S5PV210_PA_FB
|
||||
#define S3C_PA_HSMMC0 S5PV210_PA_HSMMC(0)
|
||||
#define S3C_PA_HSMMC1 S5PV210_PA_HSMMC(1)
|
||||
#define S3C_PA_HSMMC2 S5PV210_PA_HSMMC(2)
|
||||
#define S3C_PA_HSMMC3 S5PV210_PA_HSMMC(3)
|
||||
#define S3C_PA_IIC S5PV210_PA_IIC0
|
||||
#define S3C_PA_IIC1 S5PV210_PA_IIC1
|
||||
#define S3C_PA_IIC2 S5PV210_PA_IIC2
|
||||
#define S3C_PA_RTC S5PV210_PA_RTC
|
||||
#define S3C_PA_USB_HSOTG S5PV210_PA_HSOTG
|
||||
#define S3C_PA_WDT S5PV210_PA_WATCHDOG
|
||||
|
||||
/* AC97 */
|
||||
#define S5PV210_PA_AC97 0xE2200000
|
||||
#define S5P_PA_CHIPID S5PV210_PA_CHIPID
|
||||
#define S5P_PA_FIMC0 S5PV210_PA_FIMC0
|
||||
#define S5P_PA_FIMC1 S5PV210_PA_FIMC1
|
||||
#define S5P_PA_FIMC2 S5PV210_PA_FIMC2
|
||||
#define S5P_PA_MIPI_CSIS0 S5PV210_PA_MIPI_CSIS
|
||||
#define S5P_PA_ONENAND S5PC110_PA_ONENAND
|
||||
#define S5P_PA_ONENAND_DMA S5PC110_PA_ONENAND_DMA
|
||||
#define S5P_PA_SDRAM S5PV210_PA_SDRAM
|
||||
#define S5P_PA_SROMC S5PV210_PA_SROMC
|
||||
#define S5P_PA_SYSCON S5PV210_PA_SYSCON
|
||||
#define S5P_PA_TIMER S5PV210_PA_TIMER
|
||||
|
||||
#define S5PV210_PA_ADC (0xE1700000)
|
||||
#define SAMSUNG_PA_ADC S5PV210_PA_ADC
|
||||
#define SAMSUNG_PA_CFCON S5PV210_PA_CFCON
|
||||
#define SAMSUNG_PA_KEYPAD S5PV210_PA_KEYPAD
|
||||
|
||||
#define S5PV210_PA_DMC0 (0xF0000000)
|
||||
#define S5PV210_PA_DMC1 (0xF1400000)
|
||||
/* UART */
|
||||
|
||||
#define S5PV210_PA_MIPI_CSIS 0xFA600000
|
||||
#define S3C_VA_UARTx(x) (S3C_VA_UART + ((x) * S3C_UART_OFFSET))
|
||||
|
||||
/* compatibiltiy defines. */
|
||||
#define S3C_PA_UART S5PV210_PA_UART
|
||||
#define S3C_PA_HSMMC0 S5PV210_PA_HSMMC(0)
|
||||
#define S3C_PA_HSMMC1 S5PV210_PA_HSMMC(1)
|
||||
#define S3C_PA_HSMMC2 S5PV210_PA_HSMMC(2)
|
||||
#define S3C_PA_HSMMC3 S5PV210_PA_HSMMC(3)
|
||||
#define S3C_PA_IIC S5PV210_PA_IIC0
|
||||
#define S3C_PA_IIC1 S5PV210_PA_IIC1
|
||||
#define S3C_PA_IIC2 S5PV210_PA_IIC2
|
||||
#define S3C_PA_FB S5PV210_PA_FB
|
||||
#define S3C_PA_RTC S5PV210_PA_RTC
|
||||
#define S3C_PA_WDT S5PV210_PA_WATCHDOG
|
||||
#define S3C_PA_USB_HSOTG S5PV210_PA_HSOTG
|
||||
#define S5P_PA_FIMC0 S5PV210_PA_FIMC0
|
||||
#define S5P_PA_FIMC1 S5PV210_PA_FIMC1
|
||||
#define S5P_PA_FIMC2 S5PV210_PA_FIMC2
|
||||
#define S5P_PA_MIPI_CSIS0 S5PV210_PA_MIPI_CSIS
|
||||
#define S3C_PA_UART S5PV210_PA_UART
|
||||
|
||||
#define SAMSUNG_PA_ADC S5PV210_PA_ADC
|
||||
#define SAMSUNG_PA_CFCON S5PV210_PA_CFCON
|
||||
#define SAMSUNG_PA_KEYPAD S5PV210_PA_KEYPAD
|
||||
#define S5P_PA_UART(x) (S3C_PA_UART + ((x) * S3C_UART_OFFSET))
|
||||
#define S5P_PA_UART0 S5P_PA_UART(0)
|
||||
#define S5P_PA_UART1 S5P_PA_UART(1)
|
||||
#define S5P_PA_UART2 S5P_PA_UART(2)
|
||||
#define S5P_PA_UART3 S5P_PA_UART(3)
|
||||
|
||||
#define S5P_SZ_UART SZ_256
|
||||
|
||||
#endif /* __ASM_ARCH_MAP_H */
|
||||
|
@ -149,7 +149,7 @@ static struct regulator_init_data aquila_ldo2_data = {
|
||||
|
||||
static struct regulator_init_data aquila_ldo3_data = {
|
||||
.constraints = {
|
||||
.name = "VUSB/MIPI_1.1V",
|
||||
.name = "VUSB+MIPI_1.1V",
|
||||
.min_uV = 1100000,
|
||||
.max_uV = 1100000,
|
||||
.apply_uV = 1,
|
||||
@ -197,7 +197,7 @@ static struct regulator_init_data aquila_ldo7_data = {
|
||||
|
||||
static struct regulator_init_data aquila_ldo8_data = {
|
||||
.constraints = {
|
||||
.name = "VUSB/VADC_3.3V",
|
||||
.name = "VUSB+VADC_3.3V",
|
||||
.min_uV = 3300000,
|
||||
.max_uV = 3300000,
|
||||
.apply_uV = 1,
|
||||
@ -207,7 +207,7 @@ static struct regulator_init_data aquila_ldo8_data = {
|
||||
|
||||
static struct regulator_init_data aquila_ldo9_data = {
|
||||
.constraints = {
|
||||
.name = "VCC/VCAM_2.8V",
|
||||
.name = "VCC+VCAM_2.8V",
|
||||
.min_uV = 2800000,
|
||||
.max_uV = 2800000,
|
||||
.apply_uV = 1,
|
||||
@ -381,9 +381,12 @@ static struct max8998_platform_data aquila_max8998_pdata = {
|
||||
.buck1_set1 = S5PV210_GPH0(3),
|
||||
.buck1_set2 = S5PV210_GPH0(4),
|
||||
.buck2_set3 = S5PV210_GPH0(5),
|
||||
.buck1_max_voltage1 = 1200000,
|
||||
.buck1_max_voltage2 = 1200000,
|
||||
.buck2_max_voltage = 1200000,
|
||||
.buck1_voltage1 = 1200000,
|
||||
.buck1_voltage2 = 1200000,
|
||||
.buck1_voltage3 = 1200000,
|
||||
.buck1_voltage4 = 1200000,
|
||||
.buck2_voltage1 = 1200000,
|
||||
.buck2_voltage2 = 1200000,
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -288,7 +288,7 @@ static struct regulator_init_data goni_ldo2_data = {
|
||||
|
||||
static struct regulator_init_data goni_ldo3_data = {
|
||||
.constraints = {
|
||||
.name = "VUSB/MIPI_1.1V",
|
||||
.name = "VUSB+MIPI_1.1V",
|
||||
.min_uV = 1100000,
|
||||
.max_uV = 1100000,
|
||||
.apply_uV = 1,
|
||||
@ -337,7 +337,7 @@ static struct regulator_init_data goni_ldo7_data = {
|
||||
|
||||
static struct regulator_init_data goni_ldo8_data = {
|
||||
.constraints = {
|
||||
.name = "VUSB/VADC_3.3V",
|
||||
.name = "VUSB+VADC_3.3V",
|
||||
.min_uV = 3300000,
|
||||
.max_uV = 3300000,
|
||||
.apply_uV = 1,
|
||||
@ -347,7 +347,7 @@ static struct regulator_init_data goni_ldo8_data = {
|
||||
|
||||
static struct regulator_init_data goni_ldo9_data = {
|
||||
.constraints = {
|
||||
.name = "VCC/VCAM_2.8V",
|
||||
.name = "VCC+VCAM_2.8V",
|
||||
.min_uV = 2800000,
|
||||
.max_uV = 2800000,
|
||||
.apply_uV = 1,
|
||||
@ -521,9 +521,12 @@ static struct max8998_platform_data goni_max8998_pdata = {
|
||||
.buck1_set1 = S5PV210_GPH0(3),
|
||||
.buck1_set2 = S5PV210_GPH0(4),
|
||||
.buck2_set3 = S5PV210_GPH0(5),
|
||||
.buck1_max_voltage1 = 1200000,
|
||||
.buck1_max_voltage2 = 1200000,
|
||||
.buck2_max_voltage = 1200000,
|
||||
.buck1_voltage1 = 1200000,
|
||||
.buck1_voltage2 = 1200000,
|
||||
.buck1_voltage3 = 1200000,
|
||||
.buck1_voltage4 = 1200000,
|
||||
.buck2_voltage1 = 1200000,
|
||||
.buck2_voltage2 = 1200000,
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* linux/arch/arm/mach-s5pv310/include/mach/map.h
|
||||
*
|
||||
* Copyright (c) 2010 Samsung Electronics Co., Ltd.
|
||||
* Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com/
|
||||
*
|
||||
* S5PV310 - Memory map definitions
|
||||
@ -23,90 +23,43 @@
|
||||
|
||||
#include <plat/map-s5p.h>
|
||||
|
||||
#define S5PV310_PA_SYSRAM (0x02025000)
|
||||
#define S5PV310_PA_SYSRAM 0x02025000
|
||||
|
||||
#define S5PV310_PA_I2S0 0x03830000
|
||||
#define S5PV310_PA_I2S1 0xE3100000
|
||||
#define S5PV310_PA_I2S2 0xE2A00000
|
||||
|
||||
#define S5PV310_PA_PCM0 0x03840000
|
||||
#define S5PV310_PA_PCM1 0x13980000
|
||||
#define S5PV310_PA_PCM2 0x13990000
|
||||
|
||||
#define S5PV310_PA_SROM_BANK(x) (0x04000000 + ((x) * 0x01000000))
|
||||
|
||||
#define S5PC210_PA_ONENAND (0x0C000000)
|
||||
#define S5P_PA_ONENAND S5PC210_PA_ONENAND
|
||||
#define S5PC210_PA_ONENAND 0x0C000000
|
||||
#define S5PC210_PA_ONENAND_DMA 0x0C600000
|
||||
|
||||
#define S5PC210_PA_ONENAND_DMA (0x0C600000)
|
||||
#define S5P_PA_ONENAND_DMA S5PC210_PA_ONENAND_DMA
|
||||
#define S5PV310_PA_CHIPID 0x10000000
|
||||
|
||||
#define S5PV310_PA_CHIPID (0x10000000)
|
||||
#define S5P_PA_CHIPID S5PV310_PA_CHIPID
|
||||
#define S5PV310_PA_SYSCON 0x10010000
|
||||
#define S5PV310_PA_PMU 0x10020000
|
||||
#define S5PV310_PA_CMU 0x10030000
|
||||
|
||||
#define S5PV310_PA_SYSCON (0x10010000)
|
||||
#define S5P_PA_SYSCON S5PV310_PA_SYSCON
|
||||
#define S5PV310_PA_WATCHDOG 0x10060000
|
||||
#define S5PV310_PA_RTC 0x10070000
|
||||
|
||||
#define S5PV310_PA_PMU (0x10020000)
|
||||
#define S5PV310_PA_DMC0 0x10400000
|
||||
|
||||
#define S5PV310_PA_CMU (0x10030000)
|
||||
#define S5PV310_PA_COMBINER 0x10448000
|
||||
|
||||
#define S5PV310_PA_WATCHDOG (0x10060000)
|
||||
#define S5PV310_PA_RTC (0x10070000)
|
||||
#define S5PV310_PA_COREPERI 0x10500000
|
||||
#define S5PV310_PA_GIC_CPU 0x10500100
|
||||
#define S5PV310_PA_TWD 0x10500600
|
||||
#define S5PV310_PA_GIC_DIST 0x10501000
|
||||
#define S5PV310_PA_L2CC 0x10502000
|
||||
|
||||
#define S5PV310_PA_DMC0 (0x10400000)
|
||||
|
||||
#define S5PV310_PA_COMBINER (0x10448000)
|
||||
|
||||
#define S5PV310_PA_COREPERI (0x10500000)
|
||||
#define S5PV310_PA_GIC_CPU (0x10500100)
|
||||
#define S5PV310_PA_TWD (0x10500600)
|
||||
#define S5PV310_PA_GIC_DIST (0x10501000)
|
||||
#define S5PV310_PA_L2CC (0x10502000)
|
||||
|
||||
/* DMA */
|
||||
#define S5PV310_PA_MDMA 0x10810000
|
||||
#define S5PV310_PA_PDMA0 0x12680000
|
||||
#define S5PV310_PA_PDMA1 0x12690000
|
||||
|
||||
#define S5PV310_PA_GPIO1 (0x11400000)
|
||||
#define S5PV310_PA_GPIO2 (0x11000000)
|
||||
#define S5PV310_PA_GPIO3 (0x03860000)
|
||||
|
||||
#define S5PV310_PA_MIPI_CSIS0 0x11880000
|
||||
#define S5PV310_PA_MIPI_CSIS1 0x11890000
|
||||
|
||||
#define S5PV310_PA_HSMMC(x) (0x12510000 + ((x) * 0x10000))
|
||||
|
||||
#define S5PV310_PA_SROMC (0x12570000)
|
||||
#define S5P_PA_SROMC S5PV310_PA_SROMC
|
||||
|
||||
/* S/PDIF */
|
||||
#define S5PV310_PA_SPDIF 0xE1100000
|
||||
|
||||
/* I2S */
|
||||
#define S5PV310_PA_I2S0 0x03830000
|
||||
#define S5PV310_PA_I2S1 0xE3100000
|
||||
#define S5PV310_PA_I2S2 0xE2A00000
|
||||
|
||||
/* PCM */
|
||||
#define S5PV310_PA_PCM0 0x03840000
|
||||
#define S5PV310_PA_PCM1 0x13980000
|
||||
#define S5PV310_PA_PCM2 0x13990000
|
||||
|
||||
/* AC97 */
|
||||
#define S5PV310_PA_AC97 0x139A0000
|
||||
|
||||
#define S5PV310_PA_UART (0x13800000)
|
||||
|
||||
#define S5P_PA_UART(x) (S5PV310_PA_UART + ((x) * S3C_UART_OFFSET))
|
||||
#define S5P_PA_UART0 S5P_PA_UART(0)
|
||||
#define S5P_PA_UART1 S5P_PA_UART(1)
|
||||
#define S5P_PA_UART2 S5P_PA_UART(2)
|
||||
#define S5P_PA_UART3 S5P_PA_UART(3)
|
||||
#define S5P_PA_UART4 S5P_PA_UART(4)
|
||||
|
||||
#define S5P_SZ_UART SZ_256
|
||||
|
||||
#define S5PV310_PA_IIC(x) (0x13860000 + ((x) * 0x10000))
|
||||
|
||||
#define S5PV310_PA_TIMER (0x139D0000)
|
||||
#define S5P_PA_TIMER S5PV310_PA_TIMER
|
||||
|
||||
#define S5PV310_PA_SDRAM (0x40000000)
|
||||
#define S5P_PA_SDRAM S5PV310_PA_SDRAM
|
||||
#define S5PV310_PA_MDMA 0x10810000
|
||||
#define S5PV310_PA_PDMA0 0x12680000
|
||||
#define S5PV310_PA_PDMA1 0x12690000
|
||||
|
||||
#define S5PV310_PA_SYSMMU_MDMA 0x10A40000
|
||||
#define S5PV310_PA_SYSMMU_SSS 0x10A50000
|
||||
@ -125,8 +78,31 @@
|
||||
#define S5PV310_PA_SYSMMU_MFC_L 0x13620000
|
||||
#define S5PV310_PA_SYSMMU_MFC_R 0x13630000
|
||||
|
||||
/* compatibiltiy defines. */
|
||||
#define S3C_PA_UART S5PV310_PA_UART
|
||||
#define S5PV310_PA_GPIO1 0x11400000
|
||||
#define S5PV310_PA_GPIO2 0x11000000
|
||||
#define S5PV310_PA_GPIO3 0x03860000
|
||||
|
||||
#define S5PV310_PA_MIPI_CSIS0 0x11880000
|
||||
#define S5PV310_PA_MIPI_CSIS1 0x11890000
|
||||
|
||||
#define S5PV310_PA_HSMMC(x) (0x12510000 + ((x) * 0x10000))
|
||||
|
||||
#define S5PV310_PA_SROMC 0x12570000
|
||||
|
||||
#define S5PV310_PA_UART 0x13800000
|
||||
|
||||
#define S5PV310_PA_IIC(x) (0x13860000 + ((x) * 0x10000))
|
||||
|
||||
#define S5PV310_PA_AC97 0x139A0000
|
||||
|
||||
#define S5PV310_PA_TIMER 0x139D0000
|
||||
|
||||
#define S5PV310_PA_SDRAM 0x40000000
|
||||
|
||||
#define S5PV310_PA_SPDIF 0xE1100000
|
||||
|
||||
/* Compatibiltiy Defines */
|
||||
|
||||
#define S3C_PA_HSMMC0 S5PV310_PA_HSMMC(0)
|
||||
#define S3C_PA_HSMMC1 S5PV310_PA_HSMMC(1)
|
||||
#define S3C_PA_HSMMC2 S5PV310_PA_HSMMC(2)
|
||||
@ -141,7 +117,28 @@
|
||||
#define S3C_PA_IIC7 S5PV310_PA_IIC(7)
|
||||
#define S3C_PA_RTC S5PV310_PA_RTC
|
||||
#define S3C_PA_WDT S5PV310_PA_WATCHDOG
|
||||
|
||||
#define S5P_PA_CHIPID S5PV310_PA_CHIPID
|
||||
#define S5P_PA_MIPI_CSIS0 S5PV310_PA_MIPI_CSIS0
|
||||
#define S5P_PA_MIPI_CSIS1 S5PV310_PA_MIPI_CSIS1
|
||||
#define S5P_PA_ONENAND S5PC210_PA_ONENAND
|
||||
#define S5P_PA_ONENAND_DMA S5PC210_PA_ONENAND_DMA
|
||||
#define S5P_PA_SDRAM S5PV310_PA_SDRAM
|
||||
#define S5P_PA_SROMC S5PV310_PA_SROMC
|
||||
#define S5P_PA_SYSCON S5PV310_PA_SYSCON
|
||||
#define S5P_PA_TIMER S5PV310_PA_TIMER
|
||||
|
||||
/* UART */
|
||||
|
||||
#define S3C_PA_UART S5PV310_PA_UART
|
||||
|
||||
#define S5P_PA_UART(x) (S3C_PA_UART + ((x) * S3C_UART_OFFSET))
|
||||
#define S5P_PA_UART0 S5P_PA_UART(0)
|
||||
#define S5P_PA_UART1 S5P_PA_UART(1)
|
||||
#define S5P_PA_UART2 S5P_PA_UART(2)
|
||||
#define S5P_PA_UART3 S5P_PA_UART(3)
|
||||
#define S5P_PA_UART4 S5P_PA_UART(4)
|
||||
|
||||
#define S5P_SZ_UART SZ_256
|
||||
|
||||
#endif /* __ASM_ARCH_MAP_H */
|
||||
|
@ -28,7 +28,7 @@
|
||||
static struct resource s5p_uart0_resource[] = {
|
||||
[0] = {
|
||||
.start = S5P_PA_UART0,
|
||||
.end = S5P_PA_UART0 + S5P_SZ_UART,
|
||||
.end = S5P_PA_UART0 + S5P_SZ_UART - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
@ -51,7 +51,7 @@ static struct resource s5p_uart0_resource[] = {
|
||||
static struct resource s5p_uart1_resource[] = {
|
||||
[0] = {
|
||||
.start = S5P_PA_UART1,
|
||||
.end = S5P_PA_UART1 + S5P_SZ_UART,
|
||||
.end = S5P_PA_UART1 + S5P_SZ_UART - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
@ -74,7 +74,7 @@ static struct resource s5p_uart1_resource[] = {
|
||||
static struct resource s5p_uart2_resource[] = {
|
||||
[0] = {
|
||||
.start = S5P_PA_UART2,
|
||||
.end = S5P_PA_UART2 + S5P_SZ_UART,
|
||||
.end = S5P_PA_UART2 + S5P_SZ_UART - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
@ -98,7 +98,7 @@ static struct resource s5p_uart3_resource[] = {
|
||||
#if CONFIG_SERIAL_SAMSUNG_UARTS > 3
|
||||
[0] = {
|
||||
.start = S5P_PA_UART3,
|
||||
.end = S5P_PA_UART3 + S5P_SZ_UART,
|
||||
.end = S5P_PA_UART3 + S5P_SZ_UART - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
@ -123,7 +123,7 @@ static struct resource s5p_uart4_resource[] = {
|
||||
#if CONFIG_SERIAL_SAMSUNG_UARTS > 4
|
||||
[0] = {
|
||||
.start = S5P_PA_UART4,
|
||||
.end = S5P_PA_UART4 + S5P_SZ_UART,
|
||||
.end = S5P_PA_UART4 + S5P_SZ_UART - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
@ -148,7 +148,7 @@ static struct resource s5p_uart5_resource[] = {
|
||||
#if CONFIG_SERIAL_SAMSUNG_UARTS > 5
|
||||
[0] = {
|
||||
.start = S5P_PA_UART5,
|
||||
.end = S5P_PA_UART5 + S5P_SZ_UART,
|
||||
.end = S5P_PA_UART5 + S5P_SZ_UART - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
|
@ -58,4 +58,3 @@ void __init s3c24xx_ts_set_platdata(struct s3c2410_ts_mach_info *pd)
|
||||
|
||||
s3c_device_ts.dev.platform_data = npd;
|
||||
}
|
||||
EXPORT_SYMBOL(s3c24xx_ts_set_platdata);
|
||||
|
@ -133,11 +133,12 @@ unsigned long decompress_kernel(void)
|
||||
unsigned long output_addr;
|
||||
unsigned char *output;
|
||||
|
||||
check_ipl_parmblock((void *) 0, (unsigned long) output + SZ__bss_start);
|
||||
output_addr = ((unsigned long) &_end + HEAP_SIZE + 4095UL) & -4096UL;
|
||||
check_ipl_parmblock((void *) 0, output_addr + SZ__bss_start);
|
||||
memset(&_bss, 0, &_ebss - &_bss);
|
||||
free_mem_ptr = (unsigned long)&_end;
|
||||
free_mem_end_ptr = free_mem_ptr + HEAP_SIZE;
|
||||
output = (unsigned char *) ((free_mem_end_ptr + 4095UL) & -4096UL);
|
||||
output = (unsigned char *) output_addr;
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
/*
|
||||
|
@ -36,14 +36,19 @@
|
||||
|
||||
static inline int atomic_read(const atomic_t *v)
|
||||
{
|
||||
barrier();
|
||||
return v->counter;
|
||||
int c;
|
||||
|
||||
asm volatile(
|
||||
" l %0,%1\n"
|
||||
: "=d" (c) : "Q" (v->counter));
|
||||
return c;
|
||||
}
|
||||
|
||||
static inline void atomic_set(atomic_t *v, int i)
|
||||
{
|
||||
v->counter = i;
|
||||
barrier();
|
||||
asm volatile(
|
||||
" st %1,%0\n"
|
||||
: "=Q" (v->counter) : "d" (i));
|
||||
}
|
||||
|
||||
static inline int atomic_add_return(int i, atomic_t *v)
|
||||
@ -128,14 +133,19 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u)
|
||||
|
||||
static inline long long atomic64_read(const atomic64_t *v)
|
||||
{
|
||||
barrier();
|
||||
return v->counter;
|
||||
long long c;
|
||||
|
||||
asm volatile(
|
||||
" lg %0,%1\n"
|
||||
: "=d" (c) : "Q" (v->counter));
|
||||
return c;
|
||||
}
|
||||
|
||||
static inline void atomic64_set(atomic64_t *v, long long i)
|
||||
{
|
||||
v->counter = i;
|
||||
barrier();
|
||||
asm volatile(
|
||||
" stg %1,%0\n"
|
||||
: "=Q" (v->counter) : "d" (i));
|
||||
}
|
||||
|
||||
static inline long long atomic64_add_return(long long i, atomic64_t *v)
|
||||
|
@ -13,6 +13,7 @@
|
||||
|
||||
#define L1_CACHE_BYTES 256
|
||||
#define L1_CACHE_SHIFT 8
|
||||
#define NET_SKB_PAD 32
|
||||
|
||||
#define __read_mostly __attribute__((__section__(".data..read_mostly")))
|
||||
|
||||
|
@ -577,11 +577,9 @@ duration:
|
||||
if (rc)
|
||||
return;
|
||||
|
||||
if (be32_to_cpu(tpm_cmd.header.out.return_code) != 0 ||
|
||||
be32_to_cpu(tpm_cmd.header.out.length)
|
||||
!= sizeof(tpm_cmd.header.out) + sizeof(u32) + 3 * sizeof(u32))
|
||||
if (be32_to_cpu(tpm_cmd.header.out.return_code)
|
||||
!= 3 * sizeof(u32))
|
||||
return;
|
||||
|
||||
duration_cap = &tpm_cmd.params.getcap_out.cap.duration;
|
||||
chip->vendor.duration[TPM_SHORT] =
|
||||
usecs_to_jiffies(be32_to_cpu(duration_cap->tpm_short));
|
||||
@ -941,18 +939,6 @@ ssize_t tpm_show_caps_1_2(struct device * dev,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tpm_show_caps_1_2);
|
||||
|
||||
ssize_t tpm_show_timeouts(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct tpm_chip *chip = dev_get_drvdata(dev);
|
||||
|
||||
return sprintf(buf, "%d %d %d\n",
|
||||
jiffies_to_usecs(chip->vendor.duration[TPM_SHORT]),
|
||||
jiffies_to_usecs(chip->vendor.duration[TPM_MEDIUM]),
|
||||
jiffies_to_usecs(chip->vendor.duration[TPM_LONG]));
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tpm_show_timeouts);
|
||||
|
||||
ssize_t tpm_store_cancel(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
|
@ -56,8 +56,6 @@ extern ssize_t tpm_show_owned(struct device *, struct device_attribute *attr,
|
||||
char *);
|
||||
extern ssize_t tpm_show_temp_deactivated(struct device *,
|
||||
struct device_attribute *attr, char *);
|
||||
extern ssize_t tpm_show_timeouts(struct device *,
|
||||
struct device_attribute *attr, char *);
|
||||
|
||||
struct tpm_chip;
|
||||
|
||||
|
@ -376,7 +376,6 @@ static DEVICE_ATTR(temp_deactivated, S_IRUGO, tpm_show_temp_deactivated,
|
||||
NULL);
|
||||
static DEVICE_ATTR(caps, S_IRUGO, tpm_show_caps_1_2, NULL);
|
||||
static DEVICE_ATTR(cancel, S_IWUSR | S_IWGRP, NULL, tpm_store_cancel);
|
||||
static DEVICE_ATTR(timeouts, S_IRUGO, tpm_show_timeouts, NULL);
|
||||
|
||||
static struct attribute *tis_attrs[] = {
|
||||
&dev_attr_pubek.attr,
|
||||
@ -386,8 +385,7 @@ static struct attribute *tis_attrs[] = {
|
||||
&dev_attr_owned.attr,
|
||||
&dev_attr_temp_deactivated.attr,
|
||||
&dev_attr_caps.attr,
|
||||
&dev_attr_cancel.attr,
|
||||
&dev_attr_timeouts.attr, NULL,
|
||||
&dev_attr_cancel.attr, NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group tis_attr_grp = {
|
||||
|
@ -1553,17 +1553,7 @@
|
||||
|
||||
/* Backlight control */
|
||||
#define BLC_PWM_CTL 0x61254
|
||||
#define BACKLIGHT_MODULATION_FREQ_SHIFT (17)
|
||||
#define BLC_PWM_CTL2 0x61250 /* 965+ only */
|
||||
#define BLM_COMBINATION_MODE (1 << 30)
|
||||
/*
|
||||
* This is the most significant 15 bits of the number of backlight cycles in a
|
||||
* complete cycle of the modulated backlight control.
|
||||
*
|
||||
* The actual value is this field multiplied by two.
|
||||
*/
|
||||
#define BACKLIGHT_MODULATION_FREQ_MASK (0x7fff << 17)
|
||||
#define BLM_LEGACY_MODE (1 << 16)
|
||||
/*
|
||||
* This is the number of cycles out of the backlight modulation cycle for which
|
||||
* the backlight is on.
|
||||
|
@ -30,8 +30,6 @@
|
||||
|
||||
#include "intel_drv.h"
|
||||
|
||||
#define PCI_LBPC 0xf4 /* legacy/combination backlight modes */
|
||||
|
||||
void
|
||||
intel_fixed_panel_mode(struct drm_display_mode *fixed_mode,
|
||||
struct drm_display_mode *adjusted_mode)
|
||||
@ -112,19 +110,6 @@ done:
|
||||
dev_priv->pch_pf_size = (width << 16) | height;
|
||||
}
|
||||
|
||||
static int is_backlight_combination_mode(struct drm_device *dev)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||
|
||||
if (INTEL_INFO(dev)->gen >= 4)
|
||||
return I915_READ(BLC_PWM_CTL2) & BLM_COMBINATION_MODE;
|
||||
|
||||
if (IS_GEN2(dev))
|
||||
return I915_READ(BLC_PWM_CTL) & BLM_LEGACY_MODE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 i915_read_blc_pwm_ctl(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
u32 val;
|
||||
@ -181,9 +166,6 @@ u32 intel_panel_get_max_backlight(struct drm_device *dev)
|
||||
if (INTEL_INFO(dev)->gen < 4)
|
||||
max &= ~1;
|
||||
}
|
||||
|
||||
if (is_backlight_combination_mode(dev))
|
||||
max *= 0xff;
|
||||
}
|
||||
|
||||
DRM_DEBUG_DRIVER("max backlight PWM = %d\n", max);
|
||||
@ -201,15 +183,6 @@ u32 intel_panel_get_backlight(struct drm_device *dev)
|
||||
val = I915_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
|
||||
if (IS_PINEVIEW(dev))
|
||||
val >>= 1;
|
||||
|
||||
if (is_backlight_combination_mode(dev)){
|
||||
u8 lbpc;
|
||||
|
||||
val &= ~1;
|
||||
pci_read_config_byte(dev->pdev, PCI_LBPC, &lbpc);
|
||||
val *= lbpc;
|
||||
val >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
DRM_DEBUG_DRIVER("get backlight PWM = %d\n", val);
|
||||
@ -232,16 +205,6 @@ void intel_panel_set_backlight(struct drm_device *dev, u32 level)
|
||||
|
||||
if (HAS_PCH_SPLIT(dev))
|
||||
return intel_pch_panel_set_backlight(dev, level);
|
||||
|
||||
if (is_backlight_combination_mode(dev)){
|
||||
u32 max = intel_panel_get_max_backlight(dev);
|
||||
u8 lpbc;
|
||||
|
||||
lpbc = level * 0xfe / max + 1;
|
||||
level /= lpbc;
|
||||
pci_write_config_byte(dev->pdev, PCI_LBPC, lpbc);
|
||||
}
|
||||
|
||||
tmp = I915_READ(BLC_PWM_CTL);
|
||||
if (IS_PINEVIEW(dev)) {
|
||||
tmp &= ~(BACKLIGHT_DUTY_CYCLE_MASK - 1);
|
||||
|
@ -238,13 +238,13 @@ config SENSORS_K8TEMP
|
||||
will be called k8temp.
|
||||
|
||||
config SENSORS_K10TEMP
|
||||
tristate "AMD Phenom/Sempron/Turion/Opteron temperature sensor"
|
||||
tristate "AMD Family 10h/11h/12h/14h temperature sensor"
|
||||
depends on X86 && PCI
|
||||
help
|
||||
If you say yes here you get support for the temperature
|
||||
sensor(s) inside your CPU. Supported are later revisions of
|
||||
the AMD Family 10h and all revisions of the AMD Family 11h
|
||||
microarchitectures.
|
||||
the AMD Family 10h and all revisions of the AMD Family 11h,
|
||||
12h (Llano), and 14h (Brazos) microarchitectures.
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called k10temp.
|
||||
@ -455,13 +455,14 @@ config SENSORS_JZ4740
|
||||
called jz4740-hwmon.
|
||||
|
||||
config SENSORS_JC42
|
||||
tristate "JEDEC JC42.4 compliant temperature sensors"
|
||||
tristate "JEDEC JC42.4 compliant memory module temperature sensors"
|
||||
depends on I2C
|
||||
help
|
||||
If you say yes here you get support for Jedec JC42.4 compliant
|
||||
temperature sensors. Support will include, but not be limited to,
|
||||
ADT7408, CAT34TS02,, CAT6095, MAX6604, MCP9805, MCP98242, MCP98243,
|
||||
MCP9843, SE97, SE98, STTS424, TSE2002B3, and TS3000B3.
|
||||
If you say yes here, you get support for JEDEC JC42.4 compliant
|
||||
temperature sensors, which are used on many DDR3 memory modules for
|
||||
mobile devices and servers. Support will include, but not be limited
|
||||
to, ADT7408, CAT34TS02, CAT6095, MAX6604, MCP9805, MCP98242, MCP98243,
|
||||
MCP9843, SE97, SE98, STTS424(E), TSE2002B3, and TS3000B3.
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called jc42.
|
||||
@ -574,7 +575,7 @@ config SENSORS_LM85
|
||||
help
|
||||
If you say yes here you get support for National Semiconductor LM85
|
||||
sensor chips and clones: ADM1027, ADT7463, ADT7468, EMC6D100,
|
||||
EMC6D101 and EMC6D102.
|
||||
EMC6D101, EMC6D102, and EMC6D103.
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called lm85.
|
||||
|
@ -53,6 +53,8 @@ static const unsigned short normal_i2c[] = {
|
||||
|
||||
/* Configuration register defines */
|
||||
#define JC42_CFG_CRIT_ONLY (1 << 2)
|
||||
#define JC42_CFG_TCRIT_LOCK (1 << 6)
|
||||
#define JC42_CFG_EVENT_LOCK (1 << 7)
|
||||
#define JC42_CFG_SHUTDOWN (1 << 8)
|
||||
#define JC42_CFG_HYST_SHIFT 9
|
||||
#define JC42_CFG_HYST_MASK 0x03
|
||||
@ -332,7 +334,7 @@ static ssize_t set_temp_crit_hyst(struct device *dev,
|
||||
{
|
||||
struct i2c_client *client = to_i2c_client(dev);
|
||||
struct jc42_data *data = i2c_get_clientdata(client);
|
||||
long val;
|
||||
unsigned long val;
|
||||
int diff, hyst;
|
||||
int err;
|
||||
int ret = count;
|
||||
@ -380,14 +382,14 @@ static ssize_t show_alarm(struct device *dev,
|
||||
|
||||
static DEVICE_ATTR(temp1_input, S_IRUGO,
|
||||
show_temp_input, NULL);
|
||||
static DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO,
|
||||
static DEVICE_ATTR(temp1_crit, S_IRUGO,
|
||||
show_temp_crit, set_temp_crit);
|
||||
static DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO,
|
||||
static DEVICE_ATTR(temp1_min, S_IRUGO,
|
||||
show_temp_min, set_temp_min);
|
||||
static DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO,
|
||||
static DEVICE_ATTR(temp1_max, S_IRUGO,
|
||||
show_temp_max, set_temp_max);
|
||||
|
||||
static DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO,
|
||||
static DEVICE_ATTR(temp1_crit_hyst, S_IRUGO,
|
||||
show_temp_crit_hyst, set_temp_crit_hyst);
|
||||
static DEVICE_ATTR(temp1_max_hyst, S_IRUGO,
|
||||
show_temp_max_hyst, NULL);
|
||||
@ -412,8 +414,31 @@ static struct attribute *jc42_attributes[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static mode_t jc42_attribute_mode(struct kobject *kobj,
|
||||
struct attribute *attr, int index)
|
||||
{
|
||||
struct device *dev = container_of(kobj, struct device, kobj);
|
||||
struct i2c_client *client = to_i2c_client(dev);
|
||||
struct jc42_data *data = i2c_get_clientdata(client);
|
||||
unsigned int config = data->config;
|
||||
bool readonly;
|
||||
|
||||
if (attr == &dev_attr_temp1_crit.attr)
|
||||
readonly = config & JC42_CFG_TCRIT_LOCK;
|
||||
else if (attr == &dev_attr_temp1_min.attr ||
|
||||
attr == &dev_attr_temp1_max.attr)
|
||||
readonly = config & JC42_CFG_EVENT_LOCK;
|
||||
else if (attr == &dev_attr_temp1_crit_hyst.attr)
|
||||
readonly = config & (JC42_CFG_EVENT_LOCK | JC42_CFG_TCRIT_LOCK);
|
||||
else
|
||||
readonly = true;
|
||||
|
||||
return S_IRUGO | (readonly ? 0 : S_IWUSR);
|
||||
}
|
||||
|
||||
static const struct attribute_group jc42_group = {
|
||||
.attrs = jc42_attributes,
|
||||
.is_visible = jc42_attribute_mode,
|
||||
};
|
||||
|
||||
/* Return 0 if detection is successful, -ENODEV otherwise */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* k10temp.c - AMD Family 10h/11h processor hardware monitoring
|
||||
* k10temp.c - AMD Family 10h/11h/12h/14h processor hardware monitoring
|
||||
*
|
||||
* Copyright (c) 2009 Clemens Ladisch <clemens@ladisch.de>
|
||||
*
|
||||
@ -25,7 +25,7 @@
|
||||
#include <linux/pci.h>
|
||||
#include <asm/processor.h>
|
||||
|
||||
MODULE_DESCRIPTION("AMD Family 10h/11h CPU core temperature monitor");
|
||||
MODULE_DESCRIPTION("AMD Family 10h/11h/12h/14h CPU core temperature monitor");
|
||||
MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
@ -208,6 +208,7 @@ static void __devexit k10temp_remove(struct pci_dev *pdev)
|
||||
static const struct pci_device_id k10temp_id_table[] = {
|
||||
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_10H_NB_MISC) },
|
||||
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_11H_NB_MISC) },
|
||||
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CNB17H_F3) },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, k10temp_id_table);
|
||||
|
@ -41,7 +41,7 @@ static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
|
||||
enum chips {
|
||||
any_chip, lm85b, lm85c,
|
||||
adm1027, adt7463, adt7468,
|
||||
emc6d100, emc6d102
|
||||
emc6d100, emc6d102, emc6d103
|
||||
};
|
||||
|
||||
/* The LM85 registers */
|
||||
@ -90,6 +90,9 @@ enum chips {
|
||||
#define LM85_VERSTEP_EMC6D100_A0 0x60
|
||||
#define LM85_VERSTEP_EMC6D100_A1 0x61
|
||||
#define LM85_VERSTEP_EMC6D102 0x65
|
||||
#define LM85_VERSTEP_EMC6D103_A0 0x68
|
||||
#define LM85_VERSTEP_EMC6D103_A1 0x69
|
||||
#define LM85_VERSTEP_EMC6D103S 0x6A /* Also known as EMC6D103:A2 */
|
||||
|
||||
#define LM85_REG_CONFIG 0x40
|
||||
|
||||
@ -348,6 +351,7 @@ static const struct i2c_device_id lm85_id[] = {
|
||||
{ "emc6d100", emc6d100 },
|
||||
{ "emc6d101", emc6d100 },
|
||||
{ "emc6d102", emc6d102 },
|
||||
{ "emc6d103", emc6d103 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, lm85_id);
|
||||
@ -1250,6 +1254,20 @@ static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info)
|
||||
case LM85_VERSTEP_EMC6D102:
|
||||
type_name = "emc6d102";
|
||||
break;
|
||||
case LM85_VERSTEP_EMC6D103_A0:
|
||||
case LM85_VERSTEP_EMC6D103_A1:
|
||||
type_name = "emc6d103";
|
||||
break;
|
||||
/*
|
||||
* Registers apparently missing in EMC6D103S/EMC6D103:A2
|
||||
* compared to EMC6D103:A0, EMC6D103:A1, and EMC6D102
|
||||
* (according to the data sheets), but used unconditionally
|
||||
* in the driver: 62[5:7], 6D[0:7], and 6E[0:7].
|
||||
* So skip EMC6D103S for now.
|
||||
case LM85_VERSTEP_EMC6D103S:
|
||||
type_name = "emc6d103s";
|
||||
break;
|
||||
*/
|
||||
}
|
||||
} else {
|
||||
dev_dbg(&adapter->dev,
|
||||
@ -1283,6 +1301,7 @@ static int lm85_probe(struct i2c_client *client,
|
||||
case adt7468:
|
||||
case emc6d100:
|
||||
case emc6d102:
|
||||
case emc6d103:
|
||||
data->freq_map = adm1027_freq_map;
|
||||
break;
|
||||
default:
|
||||
@ -1468,7 +1487,7 @@ static struct lm85_data *lm85_update_device(struct device *dev)
|
||||
/* More alarm bits */
|
||||
data->alarms |= lm85_read_value(client,
|
||||
EMC6D100_REG_ALARM3) << 16;
|
||||
} else if (data->type == emc6d102) {
|
||||
} else if (data->type == emc6d102 || data->type == emc6d103) {
|
||||
/* Have to read LSB bits after the MSB ones because
|
||||
the reading of the MSB bits has frozen the
|
||||
LSBs (backward from the ADM1027).
|
||||
|
@ -181,6 +181,9 @@ static int __init colibri_pcmcia_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!machine_is_colibri() && !machine_is_colibri320())
|
||||
return -ENODEV;
|
||||
|
||||
colibri_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
|
||||
if (!colibri_pcmcia_device)
|
||||
return -ENOMEM;
|
||||
|
@ -227,7 +227,7 @@ config SONYPI_COMPAT
|
||||
config IDEAPAD_LAPTOP
|
||||
tristate "Lenovo IdeaPad Laptop Extras"
|
||||
depends on ACPI
|
||||
depends on RFKILL
|
||||
depends on RFKILL && INPUT
|
||||
select INPUT_SPARSEKMAP
|
||||
help
|
||||
This is a driver for the rfkill switches on Lenovo IdeaPad netbooks.
|
||||
|
@ -84,7 +84,7 @@ MODULE_LICENSE("GPL");
|
||||
*/
|
||||
#define AMW0_GUID1 "67C3371D-95A3-4C37-BB61-DD47B491DAAB"
|
||||
#define AMW0_GUID2 "431F16ED-0C2B-444C-B267-27DEB140CF9C"
|
||||
#define WMID_GUID1 "6AF4F258-B401-42fd-BE91-3D4AC2D7C0D3"
|
||||
#define WMID_GUID1 "6AF4F258-B401-42FD-BE91-3D4AC2D7C0D3"
|
||||
#define WMID_GUID2 "95764E09-FB56-4e83-B31A-37761F60994A"
|
||||
#define WMID_GUID3 "61EF69EA-865C-4BC3-A502-A0DEBA0CB531"
|
||||
|
||||
@ -1280,7 +1280,7 @@ static ssize_t set_bool_threeg(struct device *dev,
|
||||
return -EINVAL;
|
||||
return count;
|
||||
}
|
||||
static DEVICE_ATTR(threeg, S_IWUGO | S_IRUGO | S_IWUSR, show_bool_threeg,
|
||||
static DEVICE_ATTR(threeg, S_IRUGO | S_IWUSR, show_bool_threeg,
|
||||
set_bool_threeg);
|
||||
|
||||
static ssize_t show_interface(struct device *dev, struct device_attribute *attr,
|
||||
|
@ -1081,14 +1081,8 @@ static int asus_hotk_add_fs(struct acpi_device *device)
|
||||
struct proc_dir_entry *proc;
|
||||
mode_t mode;
|
||||
|
||||
/*
|
||||
* If parameter uid or gid is not changed, keep the default setting for
|
||||
* our proc entries (-rw-rw-rw-) else, it means we care about security,
|
||||
* and then set to -rw-rw----
|
||||
*/
|
||||
|
||||
if ((asus_uid == 0) && (asus_gid == 0)) {
|
||||
mode = S_IFREG | S_IRUGO | S_IWUGO;
|
||||
mode = S_IFREG | S_IRUGO | S_IWUSR | S_IWGRP;
|
||||
} else {
|
||||
mode = S_IFREG | S_IRUSR | S_IRGRP | S_IWUSR | S_IWGRP;
|
||||
printk(KERN_WARNING " asus_uid and asus_gid parameters are "
|
||||
|
@ -290,9 +290,12 @@ static int dell_rfkill_set(void *data, bool blocked)
|
||||
dell_send_request(buffer, 17, 11);
|
||||
|
||||
/* If the hardware switch controls this radio, and the hardware
|
||||
switch is disabled, don't allow changing the software state */
|
||||
switch is disabled, don't allow changing the software state.
|
||||
If the hardware switch is reported as not supported, always
|
||||
fire the SMI to toggle the killswitch. */
|
||||
if ((hwswitch_state & BIT(hwswitch_bit)) &&
|
||||
!(buffer->output[1] & BIT(16))) {
|
||||
!(buffer->output[1] & BIT(16)) &&
|
||||
(buffer->output[1] & BIT(0))) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
@ -398,6 +401,23 @@ static const struct file_operations dell_debugfs_fops = {
|
||||
|
||||
static void dell_update_rfkill(struct work_struct *ignored)
|
||||
{
|
||||
int status;
|
||||
|
||||
get_buffer();
|
||||
dell_send_request(buffer, 17, 11);
|
||||
status = buffer->output[1];
|
||||
release_buffer();
|
||||
|
||||
/* if hardware rfkill is not supported, set it explicitly */
|
||||
if (!(status & BIT(0))) {
|
||||
if (wifi_rfkill)
|
||||
dell_rfkill_set((void *)1, !((status & BIT(17)) >> 17));
|
||||
if (bluetooth_rfkill)
|
||||
dell_rfkill_set((void *)2, !((status & BIT(18)) >> 18));
|
||||
if (wwan_rfkill)
|
||||
dell_rfkill_set((void *)3, !((status & BIT(19)) >> 19));
|
||||
}
|
||||
|
||||
if (wifi_rfkill)
|
||||
dell_rfkill_query(wifi_rfkill, (void *)1);
|
||||
if (bluetooth_rfkill)
|
||||
|
@ -60,69 +60,20 @@ enum pmic_gpio_register {
|
||||
#define GPOSW_DOU 0x08
|
||||
#define GPOSW_RDRV 0x30
|
||||
|
||||
#define GPIO_UPDATE_TYPE 0x80000000
|
||||
|
||||
#define NUM_GPIO 24
|
||||
|
||||
struct pmic_gpio_irq {
|
||||
spinlock_t lock;
|
||||
u32 trigger[NUM_GPIO];
|
||||
u32 dirty;
|
||||
struct work_struct work;
|
||||
};
|
||||
|
||||
|
||||
struct pmic_gpio {
|
||||
struct mutex buslock;
|
||||
struct gpio_chip chip;
|
||||
struct pmic_gpio_irq irqtypes;
|
||||
void *gpiointr;
|
||||
int irq;
|
||||
unsigned irq_base;
|
||||
unsigned int update_type;
|
||||
u32 trigger_type;
|
||||
};
|
||||
|
||||
static void pmic_program_irqtype(int gpio, int type)
|
||||
{
|
||||
if (type & IRQ_TYPE_EDGE_RISING)
|
||||
intel_scu_ipc_update_register(GPIO0 + gpio, 0x20, 0x20);
|
||||
else
|
||||
intel_scu_ipc_update_register(GPIO0 + gpio, 0x00, 0x20);
|
||||
|
||||
if (type & IRQ_TYPE_EDGE_FALLING)
|
||||
intel_scu_ipc_update_register(GPIO0 + gpio, 0x10, 0x10);
|
||||
else
|
||||
intel_scu_ipc_update_register(GPIO0 + gpio, 0x00, 0x10);
|
||||
};
|
||||
|
||||
static void pmic_irqtype_work(struct work_struct *work)
|
||||
{
|
||||
struct pmic_gpio_irq *t =
|
||||
container_of(work, struct pmic_gpio_irq, work);
|
||||
unsigned long flags;
|
||||
int i;
|
||||
u16 type;
|
||||
|
||||
spin_lock_irqsave(&t->lock, flags);
|
||||
/* As we drop the lock, we may need multiple scans if we race the
|
||||
pmic_irq_type function */
|
||||
while (t->dirty) {
|
||||
/*
|
||||
* For each pin that has the dirty bit set send an IPC
|
||||
* message to configure the hardware via the PMIC
|
||||
*/
|
||||
for (i = 0; i < NUM_GPIO; i++) {
|
||||
if (!(t->dirty & (1 << i)))
|
||||
continue;
|
||||
t->dirty &= ~(1 << i);
|
||||
/* We can't trust the array entry or dirty
|
||||
once the lock is dropped */
|
||||
type = t->trigger[i];
|
||||
spin_unlock_irqrestore(&t->lock, flags);
|
||||
pmic_program_irqtype(i, type);
|
||||
spin_lock_irqsave(&t->lock, flags);
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&t->lock, flags);
|
||||
}
|
||||
|
||||
static int pmic_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
if (offset > 8) {
|
||||
@ -190,25 +141,24 @@ static void pmic_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
|
||||
1 << (offset - 16));
|
||||
}
|
||||
|
||||
static int pmic_irq_type(unsigned irq, unsigned type)
|
||||
/*
|
||||
* This is called from genirq with pg->buslock locked and
|
||||
* irq_desc->lock held. We can not access the scu bus here, so we
|
||||
* store the change and update in the bus_sync_unlock() function below
|
||||
*/
|
||||
static int pmic_irq_type(struct irq_data *data, unsigned type)
|
||||
{
|
||||
struct pmic_gpio *pg = get_irq_chip_data(irq);
|
||||
u32 gpio = irq - pg->irq_base;
|
||||
unsigned long flags;
|
||||
struct pmic_gpio *pg = irq_data_get_irq_chip_data(data);
|
||||
u32 gpio = data->irq - pg->irq_base;
|
||||
|
||||
if (gpio >= pg->chip.ngpio)
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock_irqsave(&pg->irqtypes.lock, flags);
|
||||
pg->irqtypes.trigger[gpio] = type;
|
||||
pg->irqtypes.dirty |= (1 << gpio);
|
||||
spin_unlock_irqrestore(&pg->irqtypes.lock, flags);
|
||||
schedule_work(&pg->irqtypes.work);
|
||||
pg->trigger_type = type;
|
||||
pg->update_type = gpio | GPIO_UPDATE_TYPE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int pmic_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
struct pmic_gpio *pg = container_of(chip, struct pmic_gpio, chip);
|
||||
@ -217,38 +167,32 @@ static int pmic_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
|
||||
}
|
||||
|
||||
/* the gpiointr register is read-clear, so just do nothing. */
|
||||
static void pmic_irq_unmask(unsigned irq)
|
||||
{
|
||||
};
|
||||
static void pmic_irq_unmask(struct irq_data *data) { }
|
||||
|
||||
static void pmic_irq_mask(unsigned irq)
|
||||
{
|
||||
};
|
||||
static void pmic_irq_mask(struct irq_data *data) { }
|
||||
|
||||
static struct irq_chip pmic_irqchip = {
|
||||
.name = "PMIC-GPIO",
|
||||
.mask = pmic_irq_mask,
|
||||
.unmask = pmic_irq_unmask,
|
||||
.set_type = pmic_irq_type,
|
||||
.irq_mask = pmic_irq_mask,
|
||||
.irq_unmask = pmic_irq_unmask,
|
||||
.irq_set_type = pmic_irq_type,
|
||||
};
|
||||
|
||||
static void pmic_irq_handler(unsigned irq, struct irq_desc *desc)
|
||||
static irqreturn_t pmic_irq_handler(int irq, void *data)
|
||||
{
|
||||
struct pmic_gpio *pg = (struct pmic_gpio *)get_irq_data(irq);
|
||||
struct pmic_gpio *pg = data;
|
||||
u8 intsts = *((u8 *)pg->gpiointr + 4);
|
||||
int gpio;
|
||||
irqreturn_t ret = IRQ_NONE;
|
||||
|
||||
for (gpio = 0; gpio < 8; gpio++) {
|
||||
if (intsts & (1 << gpio)) {
|
||||
pr_debug("pmic pin %d triggered\n", gpio);
|
||||
generic_handle_irq(pg->irq_base + gpio);
|
||||
ret = IRQ_HANDLED;
|
||||
}
|
||||
}
|
||||
|
||||
if (desc->chip->irq_eoi)
|
||||
desc->chip->irq_eoi(irq_get_irq_data(irq));
|
||||
else
|
||||
dev_warn(pg->chip.dev, "missing EOI handler for irq %d\n", irq);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __devinit platform_pmic_gpio_probe(struct platform_device *pdev)
|
||||
@ -297,8 +241,7 @@ static int __devinit platform_pmic_gpio_probe(struct platform_device *pdev)
|
||||
pg->chip.can_sleep = 1;
|
||||
pg->chip.dev = dev;
|
||||
|
||||
INIT_WORK(&pg->irqtypes.work, pmic_irqtype_work);
|
||||
spin_lock_init(&pg->irqtypes.lock);
|
||||
mutex_init(&pg->buslock);
|
||||
|
||||
pg->chip.dev = dev;
|
||||
retval = gpiochip_add(&pg->chip);
|
||||
@ -306,8 +249,13 @@ static int __devinit platform_pmic_gpio_probe(struct platform_device *pdev)
|
||||
printk(KERN_ERR "%s: Can not add pmic gpio chip.\n", __func__);
|
||||
goto err;
|
||||
}
|
||||
set_irq_data(pg->irq, pg);
|
||||
set_irq_chained_handler(pg->irq, pmic_irq_handler);
|
||||
|
||||
retval = request_irq(pg->irq, pmic_irq_handler, 0, "pmic", pg);
|
||||
if (retval) {
|
||||
printk(KERN_WARNING "pmic: Interrupt request failed\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
set_irq_chip_and_handler_name(i + pg->irq_base, &pmic_irqchip,
|
||||
handle_simple_irq, "demux");
|
||||
|
@ -162,7 +162,7 @@ set_bool_##value(struct device *dev, struct device_attribute *attr, \
|
||||
return -EINVAL; \
|
||||
return count; \
|
||||
} \
|
||||
static DEVICE_ATTR(value, S_IWUGO | S_IRUGO | S_IWUSR, \
|
||||
static DEVICE_ATTR(value, S_IRUGO | S_IWUSR, \
|
||||
show_bool_##value, set_bool_##value);
|
||||
|
||||
show_set_bool(wireless, TC1100_INSTANCE_WIRELESS);
|
||||
|
@ -2275,16 +2275,12 @@ static void tpacpi_input_send_key(const unsigned int scancode)
|
||||
if (keycode != KEY_RESERVED) {
|
||||
mutex_lock(&tpacpi_inputdev_send_mutex);
|
||||
|
||||
input_event(tpacpi_inputdev, EV_MSC, MSC_SCAN, scancode);
|
||||
input_report_key(tpacpi_inputdev, keycode, 1);
|
||||
if (keycode == KEY_UNKNOWN)
|
||||
input_event(tpacpi_inputdev, EV_MSC, MSC_SCAN,
|
||||
scancode);
|
||||
input_sync(tpacpi_inputdev);
|
||||
|
||||
input_event(tpacpi_inputdev, EV_MSC, MSC_SCAN, scancode);
|
||||
input_report_key(tpacpi_inputdev, keycode, 0);
|
||||
if (keycode == KEY_UNKNOWN)
|
||||
input_event(tpacpi_inputdev, EV_MSC, MSC_SCAN,
|
||||
scancode);
|
||||
input_sync(tpacpi_inputdev);
|
||||
|
||||
mutex_unlock(&tpacpi_inputdev_send_mutex);
|
||||
|
@ -72,7 +72,7 @@ static struct dasd_discipline dasd_eckd_discipline;
|
||||
static struct ccw_device_id dasd_eckd_ids[] = {
|
||||
{ CCW_DEVICE_DEVTYPE (0x3990, 0, 0x3390, 0), .driver_info = 0x1},
|
||||
{ CCW_DEVICE_DEVTYPE (0x2105, 0, 0x3390, 0), .driver_info = 0x2},
|
||||
{ CCW_DEVICE_DEVTYPE (0x3880, 0, 0x3390, 0), .driver_info = 0x3},
|
||||
{ CCW_DEVICE_DEVTYPE (0x3880, 0, 0x3380, 0), .driver_info = 0x3},
|
||||
{ CCW_DEVICE_DEVTYPE (0x3990, 0, 0x3380, 0), .driver_info = 0x4},
|
||||
{ CCW_DEVICE_DEVTYPE (0x2105, 0, 0x3380, 0), .driver_info = 0x5},
|
||||
{ CCW_DEVICE_DEVTYPE (0x9343, 0, 0x9345, 0), .driver_info = 0x6},
|
||||
|
@ -60,6 +60,7 @@ int ceph_init_dentry(struct dentry *dentry)
|
||||
}
|
||||
di->dentry = dentry;
|
||||
di->lease_session = NULL;
|
||||
di->parent_inode = igrab(dentry->d_parent->d_inode);
|
||||
dentry->d_fsdata = di;
|
||||
dentry->d_time = jiffies;
|
||||
ceph_dentry_lru_add(dentry);
|
||||
@ -1033,7 +1034,7 @@ static void ceph_dentry_release(struct dentry *dentry)
|
||||
u64 snapid = CEPH_NOSNAP;
|
||||
|
||||
if (!IS_ROOT(dentry)) {
|
||||
parent_inode = dentry->d_parent->d_inode;
|
||||
parent_inode = di->parent_inode;
|
||||
if (parent_inode)
|
||||
snapid = ceph_snap(parent_inode);
|
||||
}
|
||||
@ -1058,6 +1059,8 @@ static void ceph_dentry_release(struct dentry *dentry)
|
||||
kmem_cache_free(ceph_dentry_cachep, di);
|
||||
dentry->d_fsdata = NULL;
|
||||
}
|
||||
if (parent_inode)
|
||||
iput(parent_inode);
|
||||
}
|
||||
|
||||
static int ceph_snapdir_d_revalidate(struct dentry *dentry,
|
||||
|
@ -584,10 +584,14 @@ static void queue_realm_cap_snaps(struct ceph_snap_realm *realm)
|
||||
if (lastinode)
|
||||
iput(lastinode);
|
||||
|
||||
dout("queue_realm_cap_snaps %p %llx children\n", realm, realm->ino);
|
||||
list_for_each_entry(child, &realm->children, child_item)
|
||||
queue_realm_cap_snaps(child);
|
||||
list_for_each_entry(child, &realm->children, child_item) {
|
||||
dout("queue_realm_cap_snaps %p %llx queue child %p %llx\n",
|
||||
realm, realm->ino, child, child->ino);
|
||||
list_del_init(&child->dirty_item);
|
||||
list_add(&child->dirty_item, &realm->dirty_item);
|
||||
}
|
||||
|
||||
list_del_init(&realm->dirty_item);
|
||||
dout("queue_realm_cap_snaps %p %llx done\n", realm, realm->ino);
|
||||
}
|
||||
|
||||
@ -683,7 +687,9 @@ more:
|
||||
* queue cap snaps _after_ we've built the new snap contexts,
|
||||
* so that i_head_snapc can be set appropriately.
|
||||
*/
|
||||
list_for_each_entry(realm, &dirty_realms, dirty_item) {
|
||||
while (!list_empty(&dirty_realms)) {
|
||||
realm = list_first_entry(&dirty_realms, struct ceph_snap_realm,
|
||||
dirty_item);
|
||||
queue_realm_cap_snaps(realm);
|
||||
}
|
||||
|
||||
|
@ -207,6 +207,7 @@ struct ceph_dentry_info {
|
||||
struct dentry *dentry;
|
||||
u64 time;
|
||||
u64 offset;
|
||||
struct inode *parent_inode;
|
||||
};
|
||||
|
||||
struct ceph_inode_xattrs_info {
|
||||
|
@ -127,5 +127,5 @@ extern long cifs_ioctl(struct file *filep, unsigned int cmd, unsigned long arg);
|
||||
extern const struct export_operations cifs_export_ops;
|
||||
#endif /* EXPERIMENTAL */
|
||||
|
||||
#define CIFS_VERSION "1.70"
|
||||
#define CIFS_VERSION "1.71"
|
||||
#endif /* _CIFSFS_H */
|
||||
|
@ -170,7 +170,7 @@ cifs_convert_address(struct sockaddr *dst, const char *src, int len)
|
||||
{
|
||||
int rc, alen, slen;
|
||||
const char *pct;
|
||||
char *endp, scope_id[13];
|
||||
char scope_id[13];
|
||||
struct sockaddr_in *s4 = (struct sockaddr_in *) dst;
|
||||
struct sockaddr_in6 *s6 = (struct sockaddr_in6 *) dst;
|
||||
|
||||
@ -197,9 +197,9 @@ cifs_convert_address(struct sockaddr *dst, const char *src, int len)
|
||||
memcpy(scope_id, pct + 1, slen);
|
||||
scope_id[slen] = '\0';
|
||||
|
||||
s6->sin6_scope_id = (u32) simple_strtoul(pct, &endp, 0);
|
||||
if (endp != scope_id + slen)
|
||||
return 0;
|
||||
rc = strict_strtoul(scope_id, 0,
|
||||
(unsigned long *)&s6->sin6_scope_id);
|
||||
rc = (rc == 0) ? 1 : 0;
|
||||
}
|
||||
|
||||
return rc;
|
||||
|
@ -656,13 +656,13 @@ ssetup_ntlmssp_authenticate:
|
||||
|
||||
if (type == LANMAN) {
|
||||
#ifdef CONFIG_CIFS_WEAK_PW_HASH
|
||||
char lnm_session_key[CIFS_SESS_KEY_SIZE];
|
||||
char lnm_session_key[CIFS_AUTH_RESP_SIZE];
|
||||
|
||||
pSMB->req.hdr.Flags2 &= ~SMBFLG2_UNICODE;
|
||||
|
||||
/* no capabilities flags in old lanman negotiation */
|
||||
|
||||
pSMB->old_req.PasswordLength = cpu_to_le16(CIFS_SESS_KEY_SIZE);
|
||||
pSMB->old_req.PasswordLength = cpu_to_le16(CIFS_AUTH_RESP_SIZE);
|
||||
|
||||
/* Calculate hash with password and copy into bcc_ptr.
|
||||
* Encryption Key (stored as in cryptkey) gets used if the
|
||||
@ -675,8 +675,8 @@ ssetup_ntlmssp_authenticate:
|
||||
true : false, lnm_session_key);
|
||||
|
||||
ses->flags |= CIFS_SES_LANMAN;
|
||||
memcpy(bcc_ptr, (char *)lnm_session_key, CIFS_SESS_KEY_SIZE);
|
||||
bcc_ptr += CIFS_SESS_KEY_SIZE;
|
||||
memcpy(bcc_ptr, (char *)lnm_session_key, CIFS_AUTH_RESP_SIZE);
|
||||
bcc_ptr += CIFS_AUTH_RESP_SIZE;
|
||||
|
||||
/* can not sign if LANMAN negotiated so no need
|
||||
to calculate signing key? but what if server
|
||||
|
@ -46,24 +46,28 @@ static int ecryptfs_d_revalidate(struct dentry *dentry, struct nameidata *nd)
|
||||
{
|
||||
struct dentry *lower_dentry;
|
||||
struct vfsmount *lower_mnt;
|
||||
struct dentry *dentry_save;
|
||||
struct vfsmount *vfsmount_save;
|
||||
struct dentry *dentry_save = NULL;
|
||||
struct vfsmount *vfsmount_save = NULL;
|
||||
int rc = 1;
|
||||
|
||||
if (nd->flags & LOOKUP_RCU)
|
||||
if (nd && nd->flags & LOOKUP_RCU)
|
||||
return -ECHILD;
|
||||
|
||||
lower_dentry = ecryptfs_dentry_to_lower(dentry);
|
||||
lower_mnt = ecryptfs_dentry_to_lower_mnt(dentry);
|
||||
if (!lower_dentry->d_op || !lower_dentry->d_op->d_revalidate)
|
||||
goto out;
|
||||
dentry_save = nd->path.dentry;
|
||||
vfsmount_save = nd->path.mnt;
|
||||
nd->path.dentry = lower_dentry;
|
||||
nd->path.mnt = lower_mnt;
|
||||
if (nd) {
|
||||
dentry_save = nd->path.dentry;
|
||||
vfsmount_save = nd->path.mnt;
|
||||
nd->path.dentry = lower_dentry;
|
||||
nd->path.mnt = lower_mnt;
|
||||
}
|
||||
rc = lower_dentry->d_op->d_revalidate(lower_dentry, nd);
|
||||
nd->path.dentry = dentry_save;
|
||||
nd->path.mnt = vfsmount_save;
|
||||
if (nd) {
|
||||
nd->path.dentry = dentry_save;
|
||||
nd->path.mnt = vfsmount_save;
|
||||
}
|
||||
if (dentry->d_inode) {
|
||||
struct inode *lower_inode =
|
||||
ecryptfs_inode_to_lower(dentry->d_inode);
|
||||
|
@ -632,8 +632,7 @@ int ecryptfs_interpose(struct dentry *hidden_dentry,
|
||||
u32 flags);
|
||||
int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
|
||||
struct dentry *lower_dentry,
|
||||
struct inode *ecryptfs_dir_inode,
|
||||
struct nameidata *ecryptfs_nd);
|
||||
struct inode *ecryptfs_dir_inode);
|
||||
int ecryptfs_decode_and_decrypt_filename(char **decrypted_name,
|
||||
size_t *decrypted_name_size,
|
||||
struct dentry *ecryptfs_dentry,
|
||||
|
@ -317,6 +317,7 @@ ecryptfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
|
||||
const struct file_operations ecryptfs_dir_fops = {
|
||||
.readdir = ecryptfs_readdir,
|
||||
.read = generic_read_dir,
|
||||
.unlocked_ioctl = ecryptfs_unlocked_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = ecryptfs_compat_ioctl,
|
||||
|
@ -74,16 +74,20 @@ ecryptfs_create_underlying_file(struct inode *lower_dir_inode,
|
||||
unsigned int flags_save;
|
||||
int rc;
|
||||
|
||||
dentry_save = nd->path.dentry;
|
||||
vfsmount_save = nd->path.mnt;
|
||||
flags_save = nd->flags;
|
||||
nd->path.dentry = lower_dentry;
|
||||
nd->path.mnt = lower_mnt;
|
||||
nd->flags &= ~LOOKUP_OPEN;
|
||||
if (nd) {
|
||||
dentry_save = nd->path.dentry;
|
||||
vfsmount_save = nd->path.mnt;
|
||||
flags_save = nd->flags;
|
||||
nd->path.dentry = lower_dentry;
|
||||
nd->path.mnt = lower_mnt;
|
||||
nd->flags &= ~LOOKUP_OPEN;
|
||||
}
|
||||
rc = vfs_create(lower_dir_inode, lower_dentry, mode, nd);
|
||||
nd->path.dentry = dentry_save;
|
||||
nd->path.mnt = vfsmount_save;
|
||||
nd->flags = flags_save;
|
||||
if (nd) {
|
||||
nd->path.dentry = dentry_save;
|
||||
nd->path.mnt = vfsmount_save;
|
||||
nd->flags = flags_save;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -241,8 +245,7 @@ out:
|
||||
*/
|
||||
int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
|
||||
struct dentry *lower_dentry,
|
||||
struct inode *ecryptfs_dir_inode,
|
||||
struct nameidata *ecryptfs_nd)
|
||||
struct inode *ecryptfs_dir_inode)
|
||||
{
|
||||
struct dentry *lower_dir_dentry;
|
||||
struct vfsmount *lower_mnt;
|
||||
@ -290,8 +293,6 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
|
||||
goto out;
|
||||
if (special_file(lower_inode->i_mode))
|
||||
goto out;
|
||||
if (!ecryptfs_nd)
|
||||
goto out;
|
||||
/* Released in this function */
|
||||
page_virt = kmem_cache_zalloc(ecryptfs_header_cache_2, GFP_USER);
|
||||
if (!page_virt) {
|
||||
@ -348,75 +349,6 @@ out:
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
* ecryptfs_new_lower_dentry
|
||||
* @name: The name of the new dentry.
|
||||
* @lower_dir_dentry: Parent directory of the new dentry.
|
||||
* @nd: nameidata from last lookup.
|
||||
*
|
||||
* Create a new dentry or get it from lower parent dir.
|
||||
*/
|
||||
static struct dentry *
|
||||
ecryptfs_new_lower_dentry(struct qstr *name, struct dentry *lower_dir_dentry,
|
||||
struct nameidata *nd)
|
||||
{
|
||||
struct dentry *new_dentry;
|
||||
struct dentry *tmp;
|
||||
struct inode *lower_dir_inode;
|
||||
|
||||
lower_dir_inode = lower_dir_dentry->d_inode;
|
||||
|
||||
tmp = d_alloc(lower_dir_dentry, name);
|
||||
if (!tmp)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
mutex_lock(&lower_dir_inode->i_mutex);
|
||||
new_dentry = lower_dir_inode->i_op->lookup(lower_dir_inode, tmp, nd);
|
||||
mutex_unlock(&lower_dir_inode->i_mutex);
|
||||
|
||||
if (!new_dentry)
|
||||
new_dentry = tmp;
|
||||
else
|
||||
dput(tmp);
|
||||
|
||||
return new_dentry;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ecryptfs_lookup_one_lower
|
||||
* @ecryptfs_dentry: The eCryptfs dentry that we are looking up
|
||||
* @lower_dir_dentry: lower parent directory
|
||||
* @name: lower file name
|
||||
*
|
||||
* Get the lower dentry from vfs. If lower dentry does not exist yet,
|
||||
* create it.
|
||||
*/
|
||||
static struct dentry *
|
||||
ecryptfs_lookup_one_lower(struct dentry *ecryptfs_dentry,
|
||||
struct dentry *lower_dir_dentry, struct qstr *name)
|
||||
{
|
||||
struct nameidata nd;
|
||||
struct vfsmount *lower_mnt;
|
||||
int err;
|
||||
|
||||
lower_mnt = mntget(ecryptfs_dentry_to_lower_mnt(
|
||||
ecryptfs_dentry->d_parent));
|
||||
err = vfs_path_lookup(lower_dir_dentry, lower_mnt, name->name , 0, &nd);
|
||||
mntput(lower_mnt);
|
||||
|
||||
if (!err) {
|
||||
/* we dont need the mount */
|
||||
mntput(nd.path.mnt);
|
||||
return nd.path.dentry;
|
||||
}
|
||||
if (err != -ENOENT)
|
||||
return ERR_PTR(err);
|
||||
|
||||
/* create a new lower dentry */
|
||||
return ecryptfs_new_lower_dentry(name, lower_dir_dentry, &nd);
|
||||
}
|
||||
|
||||
/**
|
||||
* ecryptfs_lookup
|
||||
* @ecryptfs_dir_inode: The eCryptfs directory inode
|
||||
@ -434,7 +366,6 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
|
||||
size_t encrypted_and_encoded_name_size;
|
||||
struct ecryptfs_mount_crypt_stat *mount_crypt_stat = NULL;
|
||||
struct dentry *lower_dir_dentry, *lower_dentry;
|
||||
struct qstr lower_name;
|
||||
int rc = 0;
|
||||
|
||||
if ((ecryptfs_dentry->d_name.len == 1
|
||||
@ -444,20 +375,14 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
|
||||
goto out_d_drop;
|
||||
}
|
||||
lower_dir_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry->d_parent);
|
||||
lower_name.name = ecryptfs_dentry->d_name.name;
|
||||
lower_name.len = ecryptfs_dentry->d_name.len;
|
||||
lower_name.hash = ecryptfs_dentry->d_name.hash;
|
||||
if (lower_dir_dentry->d_op && lower_dir_dentry->d_op->d_hash) {
|
||||
rc = lower_dir_dentry->d_op->d_hash(lower_dir_dentry,
|
||||
lower_dir_dentry->d_inode, &lower_name);
|
||||
if (rc < 0)
|
||||
goto out_d_drop;
|
||||
}
|
||||
lower_dentry = ecryptfs_lookup_one_lower(ecryptfs_dentry,
|
||||
lower_dir_dentry, &lower_name);
|
||||
mutex_lock(&lower_dir_dentry->d_inode->i_mutex);
|
||||
lower_dentry = lookup_one_len(ecryptfs_dentry->d_name.name,
|
||||
lower_dir_dentry,
|
||||
ecryptfs_dentry->d_name.len);
|
||||
mutex_unlock(&lower_dir_dentry->d_inode->i_mutex);
|
||||
if (IS_ERR(lower_dentry)) {
|
||||
rc = PTR_ERR(lower_dentry);
|
||||
ecryptfs_printk(KERN_DEBUG, "%s: lookup_one_lower() returned "
|
||||
ecryptfs_printk(KERN_DEBUG, "%s: lookup_one_len() returned "
|
||||
"[%d] on lower_dentry = [%s]\n", __func__, rc,
|
||||
encrypted_and_encoded_name);
|
||||
goto out_d_drop;
|
||||
@ -479,28 +404,21 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
|
||||
"filename; rc = [%d]\n", __func__, rc);
|
||||
goto out_d_drop;
|
||||
}
|
||||
lower_name.name = encrypted_and_encoded_name;
|
||||
lower_name.len = encrypted_and_encoded_name_size;
|
||||
lower_name.hash = full_name_hash(lower_name.name, lower_name.len);
|
||||
if (lower_dir_dentry->d_op && lower_dir_dentry->d_op->d_hash) {
|
||||
rc = lower_dir_dentry->d_op->d_hash(lower_dir_dentry,
|
||||
lower_dir_dentry->d_inode, &lower_name);
|
||||
if (rc < 0)
|
||||
goto out_d_drop;
|
||||
}
|
||||
lower_dentry = ecryptfs_lookup_one_lower(ecryptfs_dentry,
|
||||
lower_dir_dentry, &lower_name);
|
||||
mutex_lock(&lower_dir_dentry->d_inode->i_mutex);
|
||||
lower_dentry = lookup_one_len(encrypted_and_encoded_name,
|
||||
lower_dir_dentry,
|
||||
encrypted_and_encoded_name_size);
|
||||
mutex_unlock(&lower_dir_dentry->d_inode->i_mutex);
|
||||
if (IS_ERR(lower_dentry)) {
|
||||
rc = PTR_ERR(lower_dentry);
|
||||
ecryptfs_printk(KERN_DEBUG, "%s: lookup_one_lower() returned "
|
||||
ecryptfs_printk(KERN_DEBUG, "%s: lookup_one_len() returned "
|
||||
"[%d] on lower_dentry = [%s]\n", __func__, rc,
|
||||
encrypted_and_encoded_name);
|
||||
goto out_d_drop;
|
||||
}
|
||||
lookup_and_interpose:
|
||||
rc = ecryptfs_lookup_and_interpose_lower(ecryptfs_dentry, lower_dentry,
|
||||
ecryptfs_dir_inode,
|
||||
ecryptfs_nd);
|
||||
ecryptfs_dir_inode);
|
||||
goto out;
|
||||
out_d_drop:
|
||||
d_drop(ecryptfs_dentry);
|
||||
@ -1092,6 +1010,8 @@ int ecryptfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||
rc = vfs_getattr(ecryptfs_dentry_to_lower_mnt(dentry),
|
||||
ecryptfs_dentry_to_lower(dentry), &lower_stat);
|
||||
if (!rc) {
|
||||
fsstack_copy_attr_all(dentry->d_inode,
|
||||
ecryptfs_inode_to_lower(dentry->d_inode));
|
||||
generic_fillattr(dentry->d_inode, stat);
|
||||
stat->blocks = lower_stat.blocks;
|
||||
}
|
||||
|
12
fs/eventfd.c
12
fs/eventfd.c
@ -99,7 +99,7 @@ EXPORT_SYMBOL_GPL(eventfd_ctx_get);
|
||||
* @ctx: [in] Pointer to eventfd context.
|
||||
*
|
||||
* The eventfd context reference must have been previously acquired either
|
||||
* with eventfd_ctx_get() or eventfd_ctx_fdget()).
|
||||
* with eventfd_ctx_get() or eventfd_ctx_fdget().
|
||||
*/
|
||||
void eventfd_ctx_put(struct eventfd_ctx *ctx)
|
||||
{
|
||||
@ -146,9 +146,9 @@ static void eventfd_ctx_do_read(struct eventfd_ctx *ctx, __u64 *cnt)
|
||||
* eventfd_ctx_remove_wait_queue - Read the current counter and removes wait queue.
|
||||
* @ctx: [in] Pointer to eventfd context.
|
||||
* @wait: [in] Wait queue to be removed.
|
||||
* @cnt: [out] Pointer to the 64bit conter value.
|
||||
* @cnt: [out] Pointer to the 64-bit counter value.
|
||||
*
|
||||
* Returns zero if successful, or the following error codes:
|
||||
* Returns %0 if successful, or the following error codes:
|
||||
*
|
||||
* -EAGAIN : The operation would have blocked.
|
||||
*
|
||||
@ -175,11 +175,11 @@ EXPORT_SYMBOL_GPL(eventfd_ctx_remove_wait_queue);
|
||||
* eventfd_ctx_read - Reads the eventfd counter or wait if it is zero.
|
||||
* @ctx: [in] Pointer to eventfd context.
|
||||
* @no_wait: [in] Different from zero if the operation should not block.
|
||||
* @cnt: [out] Pointer to the 64bit conter value.
|
||||
* @cnt: [out] Pointer to the 64-bit counter value.
|
||||
*
|
||||
* Returns zero if successful, or the following error codes:
|
||||
* Returns %0 if successful, or the following error codes:
|
||||
*
|
||||
* -EAGAIN : The operation would have blocked but @no_wait was nonzero.
|
||||
* -EAGAIN : The operation would have blocked but @no_wait was non-zero.
|
||||
* -ERESTARTSYS : A signal interrupted the wait operation.
|
||||
*
|
||||
* If @no_wait is zero, the function might sleep until the eventfd internal
|
||||
|
@ -62,7 +62,7 @@ struct module_version_attribute {
|
||||
struct module_attribute mattr;
|
||||
const char *module_name;
|
||||
const char *version;
|
||||
};
|
||||
} __attribute__ ((__aligned__(sizeof(void *))));
|
||||
|
||||
struct module_kobject
|
||||
{
|
||||
|
@ -252,8 +252,12 @@ static int ceph_tcp_recvmsg(struct socket *sock, void *buf, size_t len)
|
||||
{
|
||||
struct kvec iov = {buf, len};
|
||||
struct msghdr msg = { .msg_flags = MSG_DONTWAIT | MSG_NOSIGNAL };
|
||||
int r;
|
||||
|
||||
return kernel_recvmsg(sock, &msg, &iov, 1, len, msg.msg_flags);
|
||||
r = kernel_recvmsg(sock, &msg, &iov, 1, len, msg.msg_flags);
|
||||
if (r == -EAGAIN)
|
||||
r = 0;
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -264,13 +268,17 @@ static int ceph_tcp_sendmsg(struct socket *sock, struct kvec *iov,
|
||||
size_t kvlen, size_t len, int more)
|
||||
{
|
||||
struct msghdr msg = { .msg_flags = MSG_DONTWAIT | MSG_NOSIGNAL };
|
||||
int r;
|
||||
|
||||
if (more)
|
||||
msg.msg_flags |= MSG_MORE;
|
||||
else
|
||||
msg.msg_flags |= MSG_EOR; /* superfluous, but what the hell */
|
||||
|
||||
return kernel_sendmsg(sock, &msg, iov, kvlen, len);
|
||||
r = kernel_sendmsg(sock, &msg, iov, kvlen, len);
|
||||
if (r == -EAGAIN)
|
||||
r = 0;
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
@ -847,6 +855,8 @@ static int write_partial_msg_pages(struct ceph_connection *con)
|
||||
(msg->pages || msg->pagelist || msg->bio || in_trail))
|
||||
kunmap(page);
|
||||
|
||||
if (ret == -EAGAIN)
|
||||
ret = 0;
|
||||
if (ret <= 0)
|
||||
goto out;
|
||||
|
||||
@ -1737,16 +1747,12 @@ more_kvec:
|
||||
if (con->out_skip) {
|
||||
ret = write_partial_skip(con);
|
||||
if (ret <= 0)
|
||||
goto done;
|
||||
if (ret < 0) {
|
||||
dout("try_write write_partial_skip err %d\n", ret);
|
||||
goto done;
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
if (con->out_kvec_left) {
|
||||
ret = write_partial_kvec(con);
|
||||
if (ret <= 0)
|
||||
goto done;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* msg pages? */
|
||||
@ -1761,11 +1767,11 @@ more_kvec:
|
||||
if (ret == 1)
|
||||
goto more_kvec; /* we need to send the footer, too! */
|
||||
if (ret == 0)
|
||||
goto done;
|
||||
goto out;
|
||||
if (ret < 0) {
|
||||
dout("try_write write_partial_msg_pages err %d\n",
|
||||
ret);
|
||||
goto done;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1789,10 +1795,9 @@ do_next:
|
||||
/* Nothing to do! */
|
||||
clear_bit(WRITE_PENDING, &con->state);
|
||||
dout("try_write nothing else to write.\n");
|
||||
done:
|
||||
ret = 0;
|
||||
out:
|
||||
dout("try_write done on %p\n", con);
|
||||
dout("try_write done on %p ret %d\n", con, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -1821,19 +1826,17 @@ more:
|
||||
dout("try_read connecting\n");
|
||||
ret = read_partial_banner(con);
|
||||
if (ret <= 0)
|
||||
goto done;
|
||||
if (process_banner(con) < 0) {
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
ret = process_banner(con);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
}
|
||||
ret = read_partial_connect(con);
|
||||
if (ret <= 0)
|
||||
goto done;
|
||||
if (process_connect(con) < 0) {
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
ret = process_connect(con);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
goto more;
|
||||
}
|
||||
|
||||
@ -1848,7 +1851,7 @@ more:
|
||||
dout("skipping %d / %d bytes\n", skip, -con->in_base_pos);
|
||||
ret = ceph_tcp_recvmsg(con->sock, buf, skip);
|
||||
if (ret <= 0)
|
||||
goto done;
|
||||
goto out;
|
||||
con->in_base_pos += ret;
|
||||
if (con->in_base_pos)
|
||||
goto more;
|
||||
@ -1859,7 +1862,7 @@ more:
|
||||
*/
|
||||
ret = ceph_tcp_recvmsg(con->sock, &con->in_tag, 1);
|
||||
if (ret <= 0)
|
||||
goto done;
|
||||
goto out;
|
||||
dout("try_read got tag %d\n", (int)con->in_tag);
|
||||
switch (con->in_tag) {
|
||||
case CEPH_MSGR_TAG_MSG:
|
||||
@ -1870,7 +1873,7 @@ more:
|
||||
break;
|
||||
case CEPH_MSGR_TAG_CLOSE:
|
||||
set_bit(CLOSED, &con->state); /* fixme */
|
||||
goto done;
|
||||
goto out;
|
||||
default:
|
||||
goto bad_tag;
|
||||
}
|
||||
@ -1882,13 +1885,12 @@ more:
|
||||
case -EBADMSG:
|
||||
con->error_msg = "bad crc";
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
break;
|
||||
case -EIO:
|
||||
con->error_msg = "io error";
|
||||
goto out;
|
||||
default:
|
||||
goto done;
|
||||
break;
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
if (con->in_tag == CEPH_MSGR_TAG_READY)
|
||||
goto more;
|
||||
@ -1898,15 +1900,13 @@ more:
|
||||
if (con->in_tag == CEPH_MSGR_TAG_ACK) {
|
||||
ret = read_partial_ack(con);
|
||||
if (ret <= 0)
|
||||
goto done;
|
||||
goto out;
|
||||
process_ack(con);
|
||||
goto more;
|
||||
}
|
||||
|
||||
done:
|
||||
ret = 0;
|
||||
out:
|
||||
dout("try_read done on %p\n", con);
|
||||
dout("try_read done on %p ret %d\n", con, ret);
|
||||
return ret;
|
||||
|
||||
bad_tag:
|
||||
|
@ -315,6 +315,7 @@ static void parse_dep_file(void *map, size_t len)
|
||||
char *end = m + len;
|
||||
char *p;
|
||||
char s[PATH_MAX];
|
||||
int first;
|
||||
|
||||
p = strchr(m, ':');
|
||||
if (!p) {
|
||||
@ -327,6 +328,7 @@ static void parse_dep_file(void *map, size_t len)
|
||||
|
||||
clear_config();
|
||||
|
||||
first = 1;
|
||||
while (m < end) {
|
||||
while (m < end && (*m == ' ' || *m == '\\' || *m == '\n'))
|
||||
m++;
|
||||
@ -340,9 +342,17 @@ static void parse_dep_file(void *map, size_t len)
|
||||
if (strrcmp(s, "include/generated/autoconf.h") &&
|
||||
strrcmp(s, "arch/um/include/uml-config.h") &&
|
||||
strrcmp(s, ".ver")) {
|
||||
printf(" %s \\\n", s);
|
||||
/*
|
||||
* Do not output the first dependency (the
|
||||
* source file), so that kbuild is not confused
|
||||
* if a .c file is rewritten into .S or vice
|
||||
* versa.
|
||||
*/
|
||||
if (!first)
|
||||
printf(" %s \\\n", s);
|
||||
do_config_file(s);
|
||||
}
|
||||
first = 0;
|
||||
m = p + 1;
|
||||
}
|
||||
printf("\n%s: $(deps_%s)\n\n", target, target);
|
||||
|
@ -1252,11 +1252,19 @@ static void vortex_adbdma_resetup(vortex_t *vortex, int adbdma) {
|
||||
static int inline vortex_adbdma_getlinearpos(vortex_t * vortex, int adbdma)
|
||||
{
|
||||
stream_t *dma = &vortex->dma_adb[adbdma];
|
||||
int temp;
|
||||
int temp, page, delta;
|
||||
|
||||
temp = hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2));
|
||||
temp = (dma->period_virt * dma->period_bytes) + (temp & (dma->period_bytes - 1));
|
||||
return temp;
|
||||
page = (temp & ADB_SUBBUF_MASK) >> ADB_SUBBUF_SHIFT;
|
||||
if (dma->nr_periods >= 4)
|
||||
delta = (page - dma->period_real) & 3;
|
||||
else {
|
||||
delta = (page - dma->period_real);
|
||||
if (delta < 0)
|
||||
delta += dma->nr_periods;
|
||||
}
|
||||
return (dma->period_virt + delta) * dma->period_bytes
|
||||
+ (temp & (dma->period_bytes - 1));
|
||||
}
|
||||
|
||||
static void vortex_adbdma_startfifo(vortex_t * vortex, int adbdma)
|
||||
|
@ -2308,6 +2308,7 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = {
|
||||
SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
|
||||
SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB),
|
||||
SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB),
|
||||
SND_PCI_QUIRK(0x1043, 0x8410, "ASUS", POS_FIX_LPIB),
|
||||
SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB),
|
||||
SND_PCI_QUIRK(0x1106, 0x3288, "ASUS M2V-MX SE", POS_FIX_LPIB),
|
||||
SND_PCI_QUIRK(0x1179, 0xff10, "Toshiba A100-259", POS_FIX_LPIB),
|
||||
|
@ -3410,7 +3410,7 @@ static void cx_auto_parse_output(struct hda_codec *codec)
|
||||
}
|
||||
}
|
||||
spec->multiout.dac_nids = spec->private_dac_nids;
|
||||
spec->multiout.max_channels = nums * 2;
|
||||
spec->multiout.max_channels = spec->multiout.num_dacs * 2;
|
||||
|
||||
if (cfg->hp_outs > 0)
|
||||
spec->auto_mute = 1;
|
||||
@ -3729,9 +3729,9 @@ static int cx_auto_init(struct hda_codec *codec)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cx_auto_add_volume(struct hda_codec *codec, const char *basename,
|
||||
static int cx_auto_add_volume_idx(struct hda_codec *codec, const char *basename,
|
||||
const char *dir, int cidx,
|
||||
hda_nid_t nid, int hda_dir)
|
||||
hda_nid_t nid, int hda_dir, int amp_idx)
|
||||
{
|
||||
static char name[32];
|
||||
static struct snd_kcontrol_new knew[] = {
|
||||
@ -3743,7 +3743,8 @@ static int cx_auto_add_volume(struct hda_codec *codec, const char *basename,
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
struct snd_kcontrol *kctl;
|
||||
knew[i].private_value = HDA_COMPOSE_AMP_VAL(nid, 3, 0, hda_dir);
|
||||
knew[i].private_value = HDA_COMPOSE_AMP_VAL(nid, 3, amp_idx,
|
||||
hda_dir);
|
||||
knew[i].subdevice = HDA_SUBDEV_AMP_FLAG;
|
||||
knew[i].index = cidx;
|
||||
snprintf(name, sizeof(name), "%s%s %s", basename, dir, sfx[i]);
|
||||
@ -3759,6 +3760,9 @@ static int cx_auto_add_volume(struct hda_codec *codec, const char *basename,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define cx_auto_add_volume(codec, str, dir, cidx, nid, hda_dir) \
|
||||
cx_auto_add_volume_idx(codec, str, dir, cidx, nid, hda_dir, 0)
|
||||
|
||||
#define cx_auto_add_pb_volume(codec, nid, str, idx) \
|
||||
cx_auto_add_volume(codec, str, " Playback", idx, nid, HDA_OUTPUT)
|
||||
|
||||
@ -3808,29 +3812,60 @@ static int cx_auto_build_input_controls(struct hda_codec *codec)
|
||||
struct conexant_spec *spec = codec->spec;
|
||||
struct auto_pin_cfg *cfg = &spec->autocfg;
|
||||
static const char *prev_label;
|
||||
int i, err, cidx;
|
||||
int i, err, cidx, conn_len;
|
||||
hda_nid_t conn[HDA_MAX_CONNECTIONS];
|
||||
|
||||
int multi_adc_volume = 0; /* If the ADC nid has several input volumes */
|
||||
int adc_nid = spec->adc_nids[0];
|
||||
|
||||
conn_len = snd_hda_get_connections(codec, adc_nid, conn,
|
||||
HDA_MAX_CONNECTIONS);
|
||||
if (conn_len < 0)
|
||||
return conn_len;
|
||||
|
||||
multi_adc_volume = cfg->num_inputs > 1 && conn_len > 1;
|
||||
if (!multi_adc_volume) {
|
||||
err = cx_auto_add_volume(codec, "Capture", "", 0, adc_nid,
|
||||
HDA_INPUT);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
err = cx_auto_add_volume(codec, "Capture", "", 0, spec->adc_nids[0],
|
||||
HDA_INPUT);
|
||||
if (err < 0)
|
||||
return err;
|
||||
prev_label = NULL;
|
||||
cidx = 0;
|
||||
for (i = 0; i < cfg->num_inputs; i++) {
|
||||
hda_nid_t nid = cfg->inputs[i].pin;
|
||||
const char *label;
|
||||
if (!(get_wcaps(codec, nid) & AC_WCAP_IN_AMP))
|
||||
int j;
|
||||
int pin_amp = get_wcaps(codec, nid) & AC_WCAP_IN_AMP;
|
||||
if (!pin_amp && !multi_adc_volume)
|
||||
continue;
|
||||
|
||||
label = hda_get_autocfg_input_label(codec, cfg, i);
|
||||
if (label == prev_label)
|
||||
cidx++;
|
||||
else
|
||||
cidx = 0;
|
||||
prev_label = label;
|
||||
err = cx_auto_add_volume(codec, label, " Capture", cidx,
|
||||
nid, HDA_INPUT);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
if (pin_amp) {
|
||||
err = cx_auto_add_volume(codec, label, " Boost", cidx,
|
||||
nid, HDA_INPUT);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (!multi_adc_volume)
|
||||
continue;
|
||||
for (j = 0; j < conn_len; j++) {
|
||||
if (conn[j] == nid) {
|
||||
err = cx_auto_add_volume_idx(codec, label,
|
||||
" Capture", cidx, adc_nid, HDA_INPUT, j);
|
||||
if (err < 0)
|
||||
return err;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -785,7 +785,7 @@ int snd_usb_caiaq_audio_init(struct snd_usb_caiaqdev *dev)
|
||||
}
|
||||
|
||||
dev->pcm->private_data = dev;
|
||||
strcpy(dev->pcm->name, dev->product_name);
|
||||
strlcpy(dev->pcm->name, dev->product_name, sizeof(dev->pcm->name));
|
||||
|
||||
memset(dev->sub_playback, 0, sizeof(dev->sub_playback));
|
||||
memset(dev->sub_capture, 0, sizeof(dev->sub_capture));
|
||||
|
@ -136,7 +136,7 @@ int snd_usb_caiaq_midi_init(struct snd_usb_caiaqdev *device)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
strcpy(rmidi->name, device->product_name);
|
||||
strlcpy(rmidi->name, device->product_name, sizeof(rmidi->name));
|
||||
|
||||
rmidi->info_flags = SNDRV_RAWMIDI_INFO_DUPLEX;
|
||||
rmidi->private_data = device;
|
||||
|
Loading…
Reference in New Issue
Block a user