aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2010-05-28mfd: New AB8500 driverRabin Vincent8-477/+712
Add a new driver to support the AB8500 Power Management chip, replacing the current AB4500. The new driver replaces the old one, instead of an incremental modification, because this is a substantial overhaul including: - Split of the driver into -core and -spi portions, to allow another interface layer to be added - Addition of interrupt support - Switch to MFD core API for handling subdevices - Simplification of the APIs to remove a redundant block parameter - Rename of the APIs and macros from ab4500_* to ab8500_* - Rename of the files from ab4500* to ab8500* - Change of the driver name from ab4500 to ab8500 Acked-by: Linus Walleij <[email protected]> Acked-by: Srinidhi Kasagar <[email protected]> Signed-off-by: Rabin Vincent <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28gpio: Fix inverted rdc321x gpio data out registersFlorian Fainelli1-1/+1
rdc_gpio_set_value_impl has the gpio data registers 1 and 2 inverted, fix this. Signed-off-by: Bernhard Loos <[email protected]> Signed-off-by: Florian Fainelli <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Change rdc321x resources flags to IORESOURCE_IOFlorian Fainelli3-6/+6
The rdc321x southbridge PCI device has no MEM PCI resources that we could pass to mfd_add_devices. Since 33254dd5, mfd_add_device checks for the mem_base argument that we set to NULL. Changing the resources passed to our MFD cells from IORESOURCE_MEM to IORESOURCE_IO fixes that. Since we use those resources as offsets to the PCI configuration space base address of the southbridge device this is also more adequate. Signed-off-by: Florian Fainelli <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Move pcf50633 irq related functions to its own file.Lars-Peter Clausen3-294/+330
This reduces code clutter a bit and will ease an migration to genirq. Signed-off-by: Lars-Peter Clausen <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Use threaded irq for pcf50633Lars-Peter Clausen2-49/+10
Use threaded oneshot irq handler instead of normal irq handler and a workqueue. Signed-off-by: Lars-Peter Clausen <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: pcf50633-adc: Fix potential race in pcf50633_adc_sync_readLars-Peter Clausen1-24/+15
Currently it's not guaranteed that request struct is not already freed when reading from it. Fix this by moving synced request related fields from the pcf50633_adc_request struct to its own struct and store it on the functions stack. Signed-off-by: Lars-Peter Clausen <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Fix pcf50633 bitfield logic in interrupt handlerLars-Peter Clausen1-4/+4
Those constants are alreay bitfields. Signed-off-by: Lars-Peter Clausen <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28gpio: rdc321x needs to select MFD_CORERandy Dunlap1-0/+1
Fix rdc321x-southbridge build: GPIO_RDC321X needs to select MFD_CORE so that the core is built at the same (or higher) tristate level. rdc321x-southbridge.c:(.devinit.text+0x6103): undefined reference to `mfd_add_devices' rdc321x-southbridge.c:(.devexit.text+0xe5f): undefined reference to `mfd_remove_devices' Signed-off-by: Randy Dunlap <[email protected]> Cc: Florian Fainelli <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Use menuconfig for quicker config editingRandy Dunlap1-2/+8
Change MFD 'menu' to 'menuconfig' to facilitate easy (one-click) disabling of all MFD drivers. Signed-off-by: Randy Dunlap <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28ARM: AB3550 board configuration and irq for U300Mattias Wallin2-0/+62
This patch adds the i2c board configuration needed for the Mixed Signal chip AB3550. It also adds the irq numbers needed for the irq_chip implementation. Signed-off-by: Mattias Wallin <[email protected]> Signed-off-by: Linus Walleij <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: AB3550 core driverMattias Wallin3-0/+1416
This adds a core driver for the AB3550 mixed-signal circuit found in the ST-Ericsson U300 platforms. This driver is a singleton proxy for all access to the AB3550 sub functionality drivers which can be added on top of this one: RTC, regulators, battery and system power control, vibrator, LEDs and an ALSA codec. Signed-off-by: Mattias Wallin <[email protected]> Signed-off-by: Linus Walleij <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: AB3100 register access change to abx500 APIMattias Wallin8-92/+390
The interface for the AB3100 is changed to make way for the ABX500 family of chips: AB3550, AB5500 and future ST-Ericsson Analog Baseband chips. The register access functions are moved out to a separate struct abx500_ops. In this way the interface is moved from the implementation and the sub functionality drivers can keep their interface intact when chip infrastructure and communication mechanisms changes. We also define the AB3550 device IDs and the AB3550 platform data struct and convert the catenated 32bit event to an array of 3 x 8bits. Signed-off-by: Mattias Wallin <[email protected]> Signed-off-by: Linus Walleij <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Renamed ab3100.h to abx500.hLinus Walleij6-5/+5
The goal here is to make way for a more general interface for the analog baseband chips ab3100 ab3550 ab550 and future chips. This patch have been divided into two parts since both changing name and content of a file is not recommended in git. Signed-off-by: Mattias Wallin <[email protected]> Signed-off-by: Linus Walleij <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28gpio: Add TC35892 GPIO driverRabin Vincent3-0/+389
Add a GPIO driver to support the GPIOs on the TC35892 I/O Expander. Acked-by: Linus Walleij <[email protected]> Signed-off-by: Rabin Vincent <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Add Toshiba's TC35892 MFD coreRabin Vincent4-0/+491
The TC35892 I/O Expander provides 24 GPIOs, a keypad controller, timers, and a rotator wheel interface. This patch adds the MFD core. Acked-by: Linus Walleij <[email protected]> Signed-off-by: Rabin Vincent <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Delay to mask tsc irq in max8925Haojian Zhuang1-2/+5
There're two IRQ pins output from MAX8925. One is PMIC interrupt, the other is TSC interrupt. But they're sharing one irq chip. After initializing MAX8925 interrupts, unexpected TSC interrupt may occur and it can't be cleared if touch driver isn't loaded. Now move the operation of masking TSC interrupt behind requesting PMIC interrupt. If touch driver isn't loaded, this interrupt is always masked. Signed-off-by: Haojian Zhuang <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Remove incorrect wm8350 kfreeRabin Vincent1-3/+1
The i2c_client received in probe() should not be kfree()'d. Signed-off-by: Rabin Vincent <[email protected]> Acked-by: Mark Brown <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Fix error in wm8400 reg cache access checkPhil Carmody1-2/+2
Accessing num_reg elements in the interval [reg .. reg+num_regs) is permitted if (reg+numregs <= array size), so barf when that excluded upper bound is > array size. The prior -1 would give access to one too many elements. Signed-off-by: Phil Carmody <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28davinci: da850 TPS6507x touch screen driver board dataTodd Fischer1-0/+12
The touch screen controller in the TPS6507x chip needs values that are dependent on the characteristics of the touch screen hardware being used in the board design. In addition, the board provides version information that is exposed via the kernel input sub-system. Signed-off-by: Todd Fischer <[email protected]> Signed-off-by: Kevin Hilman <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Ensure WM831x charger interrupts are acknowledged when suspendingMark Brown2-2/+50
The charger interrupts on the WM831x are unconditionally a wake source for the system. If the power driver is not able to monitor them (for example, due to the IRQ line not having been wired up on the system) then any charger interrupt will prevent the system suspending for any meaningful amount of time since nothing will ack them. Avoid this issue by manually acknowledging these interrupts when we suspend the WM831x core device if they are masked. If software is actually using the interrupts then they will be unmasked and this change will have no effect. Signed-off-by: Mark Brown <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Initialise WM831x IRQ masks on chip even if interrupts not in useMark Brown1-8/+8
Ensure that the hardware has interrupts masked if we are not using the interrupt controller on the WM831x by initialising the masks before we check for the setup data required for the IRQ line. This avoids signalling an unused IRQ line and improves the robustness of checks that the IRQ is in use. Signed-off-by: Mark Brown <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28input: Touchscreen driver for TPS6507xTodd Fischer6-0/+443
Add touch screen input driver for TPS6507x family of multi-function chips. Uses the TPS6507x MFD driver. No interrupt support due to testing limitations of current hardware. Signed-off-by: Todd Fischer <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Add TPS6507x supportTodd Fischer5-79/+265
TPS6507x are multi function (PM, touchscreen) chipsets from TI. This commit also changes the corresponding regulator driver from being standalone to an MFD subdevice. Signed-off-by: Todd Fischer <[email protected]> Acked-by: Mark Brown <[email protected]> Signed-off-by: Liam Girdwood <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28regulator: tps6057x namespace cleanupTodd Fischer1-85/+87
Move from using tps or tsp6507x to tps6057x_pmic in a consistent manner. Signed-off-by: Todd Fischer <[email protected]> Acked-by: Mark Brown <[email protected]> Signed-off-by: Liam Girdwood <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Add tps6507x board data structureTodd Fischer3-3/+29
Add mfd structure which refrences sub-driver initialization data. For example, for a giving hardware implementation, the voltage regulator sub-driver initialization data provides the mapping betten a voltage regulator and what the output voltage is being used for. Signed-off-by: Todd Fischer <[email protected]> Acked-by: Mark Brown <[email protected]> Signed-off-by: Liam Girdwood <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Move TPS6507x register definition to header file.Todd Fischer2-59/+135
Other sub-drivers for the TPS6507x chip will need to use register definition so move it out of the source file and into a header file. Signed-off-by: Todd Fischer <[email protected]> Acked-by: Mark Brown <[email protected]> Signed-off-by: Liam Girdwood <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28gpio: Update gfp/slab.h includes for rdc321xTejun Heo1-0/+1
Implicit slab.h inclusion via percpu.h is about to go away. Make sure gfp.h or slab.h is included as necessary. Signed-off-by: Samuel Ortiz <[email protected]> Signed-off-by: Tejun Heo <[email protected]>
2010-05-28mfd: Improve WM831x AUXADC completion handlingMark Brown1-17/+48
Currently completion of WM831x AUXADC conversions is monitored by checking for convertor enable. Due to the mechanism used to ensure data corruption is avoided when reading AUXADC data there may under heavy I/O be a window where this bit has cleared but the conversion results have not been updated. Data availability is only guaranteed after the AUXADC data interrupt has been asserted. Avoid this by always using the interrupt to detect completion. If the chip IRQ is not set up then we poll the IRQ status register for up to 5ms. If it is set up then we rely on the data done interrupt with a vastly increased timeout, failing the conversion if the interrupt is not generated. This also saves a register read when using interrupts. Signed-off-by: Mark Brown <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28gpio: Add support for Janz VMOD-TTL Digital IO moduleIra W. Snyder3-0/+269
The Janz VMOD-TTL is a MODULbus daughterboard which fits onto any MODULbus carrier board. It essentially consists of some various logic and a Zilog Z8536 CIO Counter/Timer and Parallel IO Unit. The board must be physically configured with jumpers to enable a user to drive output signals. I am only interested in outputs, so I have made this driver as simple as possible. It only supports a very minimal subset of the features provided by the Z8536 chip. Signed-off-by: Ira W. Snyder <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28can: Add support for Janz VMOD-ICAN3 Intelligent CAN moduleIra W. Snyder3-0/+1841
The Janz VMOD-ICAN3 is a MODULbus daughterboard which fits onto any MODULbus carrier board. It is an intelligent CAN controller with a microcontroller and associated firmware. Signed-off-by: Ira W. Snyder <[email protected]> Acked-by: Wolfgang Grandegger <[email protected]> Acked-by: David S. Miller <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Janz CMOD-IO PCI MODULbus Carrier Board supportIra W. Snyder4-0/+369
The Janz CMOD-IO PCI MODULbus carrier board is a PCI to MODULbus bridge, which may host many different types of MODULbus daughterboards, including CAN and GPIO controllers. Signed-off-by: Ira W. Snyder <[email protected]> Reviewed-by: Wolfgang Grandegger <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Proper pcf50633 irq checkDan Carpenter1-2/+2
"pcf->irq_handler" has PCF50633_NUM_IRQ elements. Signed-off-by: Dan Carpenter <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Remove unused wm831x IRQ handler dataMark Brown1-2/+0
This was used by the old, pre-genirq IRQ implementation but is no longer required. Signed-off-by: Mark Brown <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Add timb-dma to all configurations of timberdaleRichard Röjfors2-15/+96
Add platform data for timb-dma, and add it in to timb-dma in all configurations of timberdale. Also incremented the version number. Signed-off-by: Richard Röjfors <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Section cleanup of 88pm860x driverHenrik Kretzschmar2-5/+5
This patch fixes three section mismatches. WARNING: drivers/mfd/88pm860x.o(.text+0x12): Section mismatch in reference from the function pm860x_device_exit() to the function .devexit.text:device_irq_exit() The function pm860x_device_exit() references a function in an exit section. Often the function device_irq_exit() has valid usage outside the exit section and the fix is to remove the __devexit annotation of device_irq_exit. WARNING: drivers/mfd/88pm860x.o(.text+0xb0): Section mismatch in reference from the function pm860x_device_init() to the function .devinit.text:device_8606_init() The function pm860x_device_init() references the function __devinit device_8606_init(). This is often because pm860x_device_init lacks a __devinit annotation or the annotation of device_8606_init is wrong. WARNING: drivers/mfd/88pm860x.o(.text+0xbe): Section mismatch in reference from the function pm860x_device_init() to the function .devinit.text:device_8607_init() The function pm860x_device_init() references the function __devinit device_8607_init(). This is often because pm860x_device_init lacks a __devinit annotation or the annotation of device_8607_init is wrong. Signed-off-by: Henrik Kretzschmar <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Check for mem_base when building IORESOURCE_MEM resourcesSamuel Ortiz1-1/+1
If mem_base is NULL, then we fall back to the default case, just copying the original resource. Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Off by one calculating size for timberdaleDan Carpenter1-1/+1
I'm pretty sure that it should be + 1 here. It's an off by one, because we start counting at zero. Signed-off-by: Dan Carpenter <[email protected]> Acked-by: Richard Röjfors <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28x86: remove rdc321x_defs.hFlorian Fainelli1-12/+0
This file is replaced by a cleaner version with the adding of a MFD driver for the southbridge. Signed-off-by: Florian Fainelli <[email protected]> Acked-by: Ingo Molnar <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28watchdog: Convert rdc321x_wdt to use southbridge pci deviceFlorian Fainelli1-13/+40
The RDC321x MFD southbridge driver will pass a reference to the southbridge PCI device which should be used by the watchdog driver for its operations. This patch converts the watchdog driver to use the pci_dev pointer and make use of the base register resource which is passed along with the platform device. Signed-off-by: Florian Fainelli <[email protected]> Acked-by: Wim Van Sebroeck <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28gpio: Add support for RDC321x GPIO controllerFlorian Fainelli3-1/+255
This patch adds a new GPIO driver for the RDC321x SoC GPIO controller. Signed-off-by: Florian Fainelli <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Add support for the RDC321x southbridgeFlorian Fainelli4-1/+160
This patch adds a new MFD driver for the RDC321x southbridge. This southbridge is always present in the RDC321x System-on-a-Chip and provides access to some GPIOs as well as a watchdog. Access to these two functions is done using the southbridge PCI device configuration space. Signed-off-by: Florian Fainelli <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Fix dangling pointersWolfram Sang7-2/+10
Fix I2C-drivers which missed setting clientdata to NULL before freeing the structure it points to. Also fix drivers which do this _after_ the structure was freed already. Signed-off-by: Wolfram Sang <[email protected]> Acked-by: Mark Brown <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Add in XIIC to some configurations of timberdaleRichard Röjfors1-0/+41
This patch adds in the Xilinx I2C bus driver to some of the configurations of the timberdale MFD. It provides the I2C devices to the XIIC via platform data in a similar way as done to the ocores driver. Signed-off-by: Richard Röjfors <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-28mfd: Check t7l66 platform_data pointerSamuel Ortiz1-0/+3
We should check for pdata being not NULL before dereferencing it. Reported-by: Dan Carpenter <[email protected]> Signed-off-by: Samuel Ortiz <[email protected]>
2010-05-27[IA64] Fix build breakageTony Luck2-0/+21
In commit 0ac0c0d0f837c499afd02a802f9cf52d3027fa3b cpusets: randomize node rotor used in cpuset_mem_spread_node() Jack Steiner fixed a problem with too many small tasks being assigned to node 0. Copy his code to ia64 to avoid build error. arch/ia64/kernel/smpboot.c:641: error: ‘cpu_to_node_map’ undeclared (first use in this function) In commit 3bccd996276b108c138e8176793a26ecef54d573 numa: ia64: use generic percpu var numa_node_id() implementation Lee Schermerhorn added some set_numa_node() calls - but these only work on CONFIG_NUMA=y configurations. Surround the calls with #ifdef CONFIG_NUMA Signed-off-by: Tony Luck <[email protected]>
2010-05-27Merge branch 'perf-core-for-linus' of ↵Linus Torvalds75-3147/+1847
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip * 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (61 commits) tracing: Add __used annotation to event variable perf, trace: Fix !x86 build bug perf report: Support multiple events on the TUI perf annotate: Fix up usage of the build id cache x86/mmiotrace: Remove redundant instruction prefix checks perf annotate: Add TUI interface perf tui: Remove annotate from popup menu after failure perf report: Don't start the TUI if -D is used perf: Fix getline undeclared perf: Optimize perf_tp_event_match() perf: Remove more code from the fastpath perf: Optimize the !vmalloc backed buffer perf: Optimize perf_output_copy() perf: Fix wakeup storm for RO mmap()s perf-record: Share per-cpu buffers perf-record: Remove -M perf: Ensure that IOC_OUTPUT isn't used to create multi-writer buffers perf, trace: Optimize tracepoints by using per-tracepoint-per-cpu hlist to track events perf, trace: Optimize tracepoints by removing IRQ-disable from perf/tracepoint interaction perf tui: Allow disabling the TUI on a per command basis in ~/.perfconfig ...
2010-05-27DMAENGINE: DMA40 U8500 platform configurationLinus Walleij6-1/+283
This completes the DMA40 support with the platform-specific configuration for U8500/DB8500. Signed-off-by: Linus Walleij <[email protected]> Acked-by: Srinidhi Kasagar <[email protected]> Reviewed-by: Alessandro Rubini <[email protected]> Cc: [email protected] Acked-by: Russell King <[email protected]> [fixed up dma40_{tx|rx}_map declaration/initialization] Signed-off-by: Dan Williams <[email protected]>
2010-05-27posix_timer: Fix error path in timer_createAndrey Vagin1-7/+4
Move CLOCK_DISPATCH(which_clock, timer_create, (new_timer)) after all posible EFAULT erros. *_timer_create may allocate/get resources. (for example posix_cpu_timer_create does get_task_struct) [ tglx: fold the remove crappy comment patch into this ] Signed-off-by: Andrey Vagin <[email protected]> Cc: Oleg Nesterov <[email protected]> Cc: Pavel Emelyanov <[email protected]> Cc: <[email protected]> Reviewed-by: Stanislaw Gruszka <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]>
2010-05-27x86, cpufeature: Unbreak compile with gcc 3.xH. Peter Anvin1-0/+7
gcc 3 is too braindamaged to be able to compile static_cpu_has() -- apparently it can't tell that a constant passed to an inline function is still a constant -- so if we're using gcc 3, just use the dynamic test. This is bad for performance, but if you care about performance, don't use an ancient, known-to-optimize-poorly compiler. Reported-and-tested-by: Eric Dumazet <[email protected]> LKML-Reference: <[email protected]> Signed-off-by: H. Peter Anvin <[email protected]>
2010-05-27Merge branch 'for-linus' of git://git.o-hand.com/linux-rpurdie-backlightLinus Torvalds18-120/+2750
* 'for-linus' of git://git.o-hand.com/linux-rpurdie-backlight: gta02: Use pcf50633 backlight driver instead of platform backlight driver. backlight: pcf50633: Register a pcf50633-backlight device in pcf50633 core driver. backlight: Add pcf50633 backlight driver backlight: 88pm860x_bl: fix error handling in pm860x_backlight_probe backlight: max8925_bl: Fix error handling path backlight: l4f00242t03: fix error handling in l4f00242t03_probe backlight: add S6E63M0 AMOLED LCD Panel driver backlight: adp8860: add support for ADP8861 & ADP8863 backlight: mbp_nvidia_bl - Fix DMI_SYS_VENDOR for MacBook1,1 backlight: Add Cirrus EP93xx backlight driver backlight: l4f00242t03: Fix regulators handling code in remove function backlight: fix adp8860_bl build errors backlight: new driver for the ADP8860 backlight parts backlight: 88pm860x_bl - potential memory leak backlight: mbp_nvidia_bl - add support for older MacBookPro and MacBook 6,1. backlight: Kconfig cleanup backlight: backlight_device_register() return ERR_PTR()