- 22 8月, 2016 2 次提交
-
-
由 Vignesh R 提交于
Now that open delay and sample delay for each channel is configurable via DT, the default IDLE_TIMEOUT value is not enough as this is calculated based on hardcoded macros. This results in driver returning EBUSY sometimes. Fix this by increasing the timeout value based on maximum value possible to open delay and sample delays for each channel. Fixes: 5dc11e81 ("iio: adc: ti_am335x_adc: make sample delay, open delay, averaging DT parameters") Signed-off-by: NVignesh R <vigneshr@ti.com> Acked-by: NLee Jones <lee.jones@linaro.org> Cc: <Stable@vger.kernel.org> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
由 Vignesh R 提交于
It is possible that two or more ADC channels can be simultaneously requested for raw samples, in which case there can be race in access to FIFO data resulting in loss of samples. If am335x_tsc_se_set_once() is called again from tiadc_read_raw(), when ADC is still acquired to sample one of the channels, the second process might be put into uninterruptible sleep state. Fix these issues, by protecting FIFO access and channel configurations with a mutex. Since tiadc_read_raw() might take anywhere between few microseconds to few milliseconds to finish execution (depending on averaging and delay values supplied via DT), its better to use mutex instead of spinlock. Fixes: 7ca6740c ("mfd: input: iio: ti_amm335x: Rework TSC/ADC synchronization") Signed-off-by: NVignesh R <vigneshr@ti.com> Cc: <Stable@vger.kernel.org> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 03 6月, 2016 2 次提交
-
-
由 Andrew F. Davis 提交于
Replace ifdefs with SIMPLE_DEV_PM_OPS helper macro. Signed-off-by: NAndrew F. Davis <afd@ti.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
由 Andrew F. Davis 提交于
Fix the code formatting to use the kernel preferred style of using the actual variables to determize the size using the sizeof() operator. Signed-off-by: NAndrew F. Davis <afd@ti.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 16 1月, 2016 1 次提交
-
-
由 Jonathan Cameron 提交于
Whilst this part has a hardware buffer, the identifcation that IIO cares about is the userspace facing end. It this case we push individual elements from the hardware fifo into the software interface (specifically a kfifo) rather than providing direct reads through to a hardware buffer (as we still do in the sca3000 for example). Technically the original specification as a hardware buffer could be considered wrong, but it didn't matter until the patch listed below. Result is that any attempt to enable the buffer will return -EINVAL Fixes: 225d59ad ("iio: Specify supported modes for buffers") Cc: <Stable@vger.kernel.org> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 14 5月, 2015 1 次提交
-
-
由 Vignesh R 提交于
Add optional DT properties to set open delay, sample delay and number of averages per sample for each adc step. Open delay, sample delay and averaging are some of the parameters that affect the sampling rate and accuracy of the sample. Making these parameters configurable via DT will help in balancing speed vs accuracy. Signed-off-by: NVignesh R <vigneshr@ti.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 09 4月, 2015 1 次提交
-
-
由 Vignesh R 提交于
Refactor DT parsing into a separate function from probe() to help addition of more DT parameters later. No functional changes. Signed-off-by: NVignesh R <vigneshr@ti.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 08 3月, 2015 1 次提交
-
-
由 Octavian Purdila 提交于
If the in-kernel push interface is used we may have a different masks on the device buffer and the kernel buffer and in this case the device should generate data for the reunion of the buffers, which is available at indio_dev->active_scan_mask. Compiled tested only except for bmc150-accel which was tested at runtime with the hardware. Signed-off-by: NOctavian Purdila <octavian.purdila@intel.com> Cc: <stable@vger.kernel.org> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 04 2月, 2015 1 次提交
-
-
由 Brad Griffis 提交于
This patch makes the initial changes required to workaround TSC-false pen-up interrupts. It is required to implement these changes in order to remove udelay in the TSC interrupt handler and false pen-up events. The charge step is to be executed immediately after sampling X+. Hence TSC is made to use higher numbered steps (steps 5 to 16 for 5 co-ordinate readouts, 4 wire TSC configuration) and ADC to use lower ones. Further X co-ordinate readouts must be the last to be sampled, thus co-ordinates are sampled in the order Y-Z-X. Signed-off-by: NBrad Griffis <bgriffis@ti.com> [vigneshr@ti.com: Ported the patch from v3.12 to v3.19rc1] Signed-off-by: NVignesh R <vigneshr@ti.com> Acked-by: NJonathan Cameron <jic23@kernel.org> Signed-off-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
-
- 26 12月, 2014 1 次提交
-
-
由 Karol Wrona 提交于
indio_dev was unused in function body plus some small style fix - add new lines after "if(sth) return sth" and before the last return statement. The argument was removed also in its client. Signed-off-by: NKarol Wrona <k.wrona@samsung.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 12 12月, 2014 1 次提交
-
-
由 Lars-Peter Clausen 提交于
Originally device and buffer registration were kept as separate operations in IIO to allow to register two distinct sets of channels for buffered and non-buffered operations. This has since already been further restricted and the channel set registered for the buffer needs to be a subset of the channel set registered for the device. Additionally the possibility to not have a raw (or processed) attribute for a channel which was registered for the device was added a while ago. This means it is possible to not register any device level attributes for a channel even if it is registered for the device. Also if a channel's scan_index is set to -1 and the channel is registered for the buffer it is ignored. So in summary it means it is possible to register the same channel array for both the device and the buffer yet still end up with distinctive sets of channels for both of them. This makes the argument for having to have to manually register the channels for both the device and the buffer invalid. Considering that the vast majority of all drivers want to register the same set of channels for both the buffer and the device it makes sense to move the buffer registration into the core to avoid some boiler-plate code in the device driver setup path. Signed-off-by: NLars-Peter Clausen <lars@metafoo.de> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 27 8月, 2014 1 次提交
-
-
由 Sanjeev Sharma 提交于
This patch removes the .owner field for drivers which use the platform_driver_register api because this is overriden in _platform_driver_register. Signed-off-by: NSanjeev Sharma <Sanjeev_Sharma@mentor.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 09 7月, 2014 1 次提交
-
-
由 Jan Kardell 提交于
Since AI lines could be selected at will (linux-3.11) the sending and receiving ends of the FIFO does not agree about what step is used for a line. It only works if the last lines are used, like 5,6,7, and fails if ie 2,4,6 is selected in DT. Signed-off-by: NJan Kardell <jan.kardell@telliq.com> Tested-by: NZubair Lutfullah <zubair.lutfullah@gmail.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org> Cc: stable@vger.kernel.org
-
- 11 1月, 2014 1 次提交
-
-
由 Paul Gortmaker 提交于
None of these files are actually using any __init type directives and hence don't need to include <linux/init.h>. Most are just a left over from __devinit and __cpuinit removal, or simply due to code getting copied from one driver to the next. Signed-off-by: NPaul Gortmaker <paul.gortmaker@windriver.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 07 1月, 2014 4 次提交
-
-
The ADC driver always programs all possible ADC values and discards them except for the value IIO asked for. On the am335x-evm the driver programs four values and it takes 500us to gather them. Reducing the number of conversations down to the (required) one also reduces the busy loop down to 125us. This leads to another error, namely the FIFOCOUNT register is sometimes (like one out of 10 attempts) not updated in time leading to EBUSY. The next read has the FIFOCOUNT register updated. Checking for the ADCSTAT register for being idle isn't a good choice either. The problem is that if TSC is used at the same time, the HW completes the conversation for ADC *and* before the driver noticed it, the HW begins to perform a TSC conversation and so the driver never seen the HW idle. The next time we would have two values in the FIFO but since the driver reads everything we always see the current one. So instead of polling for the IDLE bit in ADCStatus register, we should check the FIFOCOUNT register. It should be one instead of zero because we request one value. This change in turn leads to another error. Sometimes if TSC & ADC are used together the TSC starts generating interrupts even if nobody actually touched the touchscreen. The interrupts seem valid because TSC's FIFO is filled with values for each channel of the TSC. This condition stops after a few ADC reads but will occur again. Not good. On top of this (even without the changes I just mentioned) there is a ADC & TSC lockup condition which was reported to me by Jeff Lance including the following test case: A busy loop of "cat /sys/bus/iio/devices/iio\:device0/in_voltage4_raw" and a mug on touch screen. With this setup, the hardware will lockup after something between 20 minutes and it could take up to a couple of hours. During that lockup, the ADCSTAT register says 0x30 (or 0x70) which means STEP_ID = IDLE and FSM_BUSY = yes. That means the hardware says that it is idle and busy at the same time which is an invalid condition. For all this reasons I decided to rework this TSC/ADC part and add a handshake / synchronization here: First the ADC signals that it needs the HW and writes a 0 mask into the SE register. The HW (if active) will complete the current conversation and become idle. The TSC driver will gather the values from the FIFO (woken up by an interrupt) and won't "enable" another conversation. Instead it will wake up the ADC driver which is already waiting. The ADC driver will start "its" conversation and once it is done, it will enable the TSC steps so the TSC will work again. After this rework I haven't observed the lockup so far. Plus the busy loop has been reduced from 500us to 125us. The continues-read mode remains unchanged. Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de> Acked-by: NJonathan Cameron <jic23@kernel.org> Signed-off-by: NLee Jones <lee.jones@linaro.org>
-
The update of the SE register in MFD doesn't look right as it has nothing to do with it. The better place to do it is in TSC driver (which is already doing it) and in the ADC driver which needs this only in the continues mode. Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de> Acked-by: NJonathan Cameron <jic23@kernel.org> Signed-off-by: NLee Jones <lee.jones@linaro.org>
-
The purpose of reg_se_cache has been defeated. It should avoid the read-back of the register to avoid the latency and the fact that the bits are reset to 0 after the individual conversation took place. The reason why this is required like this to work, is that read-back of the register removes the bits of the ADC so they do not start another conversation after the register is re-written from the TSC side for the update. To avoid the not required read-back I introduce a "set once" variant which does not update the cache mask. After the conversation completes, the bit is removed from the SE register anyway and we don't plan a new conversation "any time soon". The current set function is renamed to set_cache to distinguish the two operations. This is a small preparation for a larger sync-rework. Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de> Acked-by: NDmitry Torokhov <dmitry.torokhov@gmail.com> Acked-by: NJonathan Cameron <jic23@kernel.org> Signed-off-by: NLee Jones <lee.jones@linaro.org>
-
It somehow looks like the ending bracket belongs to the if statement but it does belong to the while loop. This patch moves the bracket where it belongs. Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de> Acked-by: NJonathan Cameron <jic23@kernel.org> Signed-off-by: NLee Jones <lee.jones@linaro.org>
-
- 09 11月, 2013 1 次提交
-
-
由 Lars-Peter Clausen 提交于
The driver is missing the iio_buffer_attach() call. As such it will attempt to free the buffer twice on removal. Introduced in commit 9e69c9 ("iio: Add reference counting for buffers"). Signed-off-by: NLars-Peter Clausen <lars@metafoo.de> Reported-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 24 10月, 2013 1 次提交
-
-
由 Sachin Kamat 提交于
ti_adc_dt_ids is always compiled in. Hence of_match_ptr is not needed. Signed-off-by: NSachin Kamat <sachin.kamat@linaro.org> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 17 10月, 2013 1 次提交
-
-
由 Lars-Peter Clausen 提交于
The equivalent of iio_sw_buffer_preenable() is now done in the IIO buffer core, so there is no need to do this from the driver anymore. Signed-off-by: NLars-Peter Clausen <lars@metafoo.de> Cc: Zubair Lutfullah <zubair.lutfullah@gmail.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 23 9月, 2013 3 次提交
-
-
由 Zubair Lutfullah 提交于
Driver is functional without this error case. Cleaned up. Signed-off-by: NZubair Lutfullah <zubair.lutfullah@gmail.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
由 Zubair Lutfullah 提交于
Trigger related headers and variables are not needed as driver is now based on INDIO_BUFFER_HARDWARE mode Signed-off-by: NZubair Lutfullah <zubair.lutfullah@gmail.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
由 Zubair Lutfullah 提交于
Static is missing in function header. Corrected. Signed-off-by: NZubair Lutfullah <zubair.lutfullah@gmail.com> Reported-by: Nkbuild test robot <fengguang.wu@intel.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 22 9月, 2013 1 次提交
-
-
由 Zubair Lutfullah 提交于
Previously the driver had only one-shot reading functionality. This patch adds continuous sampling support to the driver. Continuous sampling starts when buffer is enabled. HW IRQ wakes worker thread that pushes samples to userspace. Sampling stops when buffer is disabled by userspace. Patil Rachna (TI) laid the ground work for ADC HW register access. Russ Dill (TI) fixed bugs in the driver relevant to FIFOs and IRQs. I fixed channel scanning so multiple ADC channels can be read simultaneously and pushed to userspace. Restructured the driver to fit IIO ABI. And added INDIO_BUFFER_HARDWARE mode. Signed-off-by: NZubair Lutfullah <zubair.lutfullah@gmail.com> Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: NRuss Dill <Russ.Dill@ti.com> Acked-by: NLee Jones <lee.jones@linaro.org> Acked-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 21 9月, 2013 1 次提交
-
-
由 Zubair Lutfullah 提交于
12 bit ADC data is stored in 32 bits of storage. Change from u32 to u16 to reduce wasted memory. Signed-off-by: NZubair Lutfullah <zubair.lutfullah@gmail.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 04 8月, 2013 1 次提交
-
-
由 Sachin Kamat 提交于
Using devm_iio_device_alloc makes code simpler. Signed-off-by: NSachin Kamat <sachin.kamat@linaro.org> Cc: Rachna Patil <rachna@ti.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 22 7月, 2013 1 次提交
-
-
由 Patil, Rachna 提交于
Previously we tried to read data form ADC even before ADC sequencer finished sampling. This led to wrong samples. We now wait on ADC status register idle bit to be set. Signed-off-by: NPatil, Rachna <rachna@ti.com> Signed-off-by: NZubair Lutfullah <zubair.lutfullah@gmail.com> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 06 7月, 2013 1 次提交
-
-
由 Wei Yongjun 提交于
Add missing .driver_module of struct iio_info. This prevents the module from being removed from underneath its users. Signed-off-by: NWei Yongjun <yongjun_wei@trendmicro.com.cn> Signed-off-by: NJonathan Cameron <jic23@kernel.org>
-
- 13 6月, 2013 8 次提交
-
-
Usually we get all the values we wanted but it is possible, that te ADC unit is busy performing the conversation for the HW events. In that case -EBUSY is returned and the user may re-call the function. Acked-by: NJonathan Cameron <jic23@kernel.org> Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
-
The TSC part allows to specify the input lines. The IIO part assumes that it usues always the last few, that means if IIO has adc-channels set to 2 it will use channel 6 and 7. However it might make sense to use only 6. This patch changes the device property (which was introduced recently and was never in an official release) in a way that the user can specify which of the AIN lines should be used. In Addition to this, the name is now AINx where x is the channel number i.e. for AIN6 we would have 6. Prior this, it always started counting at 0 which is confusing. In addition to this, it also checks for correct step number during reading and does not rely on proper FIFO depth. Acked-by: NJonathan Cameron <jic23@kernel.org> Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
-
The driver programs a threshold of "coordinate_readouts" say 5. The REG_FIFO0THR registers says it should it be programmed to "threshold minus one". The driver does not expect just 5 coordinates but 5 * 2 + 2. Multiplied by two because 5 for X and 5 for Y and plus 2 because we have two Z. The whole thing kind of works because It reads the 5 coordinates for X and Y from FIFO0 and FIFO1 and the last element in each FIFO is ignored within the loop and read later. Nothing guaranties that FIFO1 is ready by the time it is read. In fact I could see that that FIFO1 reaturns for Y channels 8,9, 10, 12, 6 and for Y channel 7 for Z. The problem is that channel 7 and channel 12 got somehow mixed up. The other Problem is that FIFO1 is also used by the IIO part leading to wrong results if both (tsc & adc) are used. The patch tries to clean up the whole thing a little: - Remove the +1 and -1 in REG_STEPCONFIG, REG_STEPDELAY and its counter part in the for loop. This is just confusing. - Use only FIFO0 in TSC. The fifo has space for 64 entries so should be fine. - Read the whole FIFO in one function and check the channel. - in case we dawdle around, make sure we only read a multiple of our coordinate set. On the second interrupt we will cleanup the remaining enties. Acked-by: NDmitry Torokhov <dmitry.torokhov@gmail.com> Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
-
TI-adc reads a little better compared to tiadc. And if we add am335x to it then we have the same naming scheme as the tsc side. Acked-by: NJonathan Cameron <jic23@kernel.org> Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
-
由 Pantelis Antoniou 提交于
This patch provides the members "datasheet_name" and scan_type. This is the remaining part of the earlier patch where I (bigeasy) removed iio_map because it is now supplied by the device tree. It also static names as suggested by Jonathan. Acked-by: NJonathan Cameron <jic23@kernel.org> Signed-off-by: NPantelis Antoniou <panto@antoniou-consulting.com> Signed-off-by: NFelipe Balbi <balbi@ti.com> Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
-
This patch removes access to platform data mfd_tscadc_board because the platform is DT only. Acked-by: NJonathan Cameron <jic23@kernel.org> Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
-
由 Patil, Rachna 提交于
Add DT support for client ADC driver. Acked-by: NJonathan Cameron <jic23@kernel.org> Signed-off-by: NPatil, Rachna <rachna@ti.com> Signed-off-by: NPantelis Antoniou <panto@antoniou-consulting.com> Signed-off-by: NFelipe Balbi <balbi@ti.com> Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
-
由 Patil, Rachna 提交于
Current code has hard coded value written to step enable bits. Now the bits are updated based on how many steps are needed to be configured got from platform data. The user needs to take care not to exceed the count more than 16. While using ADC and TSC one should take care to set this parameter correctly. Sebastian added the common lock and moved the code, that manipulates the steps, from into the mfd module. Signed-off-by: NPatil, Rachna <rachna@ti.com> Signed-off-by: NFelipe Balbi <balbi@ti.com> Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
-
- 12 6月, 2013 1 次提交
-
-
The mfd driver creates platform data for the child devices and it is the ti_tscadc_dev struct. This struct is copied for the two devices. The copy of the structure makes a common lock in this structure a little less usefull. Therefore the platform data is not a pointer to the structure and the same structure is used. While doing the change I noticed that the suspend/resume code assumes the wrong pointer for ti_tscadc_dev and this has been fixed as well. Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
-
- 18 3月, 2013 1 次提交
-
-
由 Jonathan Cameron 提交于
The original info_mask is going away in favour of the broken out versions. Signed-off-by: NJonathan Cameron <jic23@kernel.org> cc: Patil, Rachna <rachna@ti.com>
-
- 04 1月, 2013 1 次提交
-
-
由 Greg Kroah-Hartman 提交于
CONFIG_HOTPLUG is going away as an option. As a result, the __dev* markings need to be removed. This change removes the use of __devinit, __devexit_p, and __devexit from these drivers. Based on patches originally written by Bill Pemberton, but redone by me in order to handle some of the coding style issues better, by hand. Cc: Bill Pemberton <wfp5p@virginia.edu> Cc: Jonathan Cameron <jic23@cam.ac.uk> Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
-