Merge branch 'staging-linus' into staging-next
We need this for the pstore fixes that went into the staging-linus branch, so that things apply properly for the pstore/android code merge. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Коммит
89a86a2da3
|
@ -218,6 +218,7 @@ What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_scale
|
|||
What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_supply_scale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_voltage_scale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_voltageY_scale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_altvoltageY_scale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_accel_scale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_accel_peak_scale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_scale
|
||||
|
@ -272,6 +273,7 @@ What: /sys/bus/iio/devices/iio:deviceX/in_accel_scale_available
|
|||
What: /sys/.../iio:deviceX/in_voltageX_scale_available
|
||||
What: /sys/.../iio:deviceX/in_voltage-voltage_scale_available
|
||||
What: /sys/.../iio:deviceX/out_voltageX_scale_available
|
||||
What: /sys/.../iio:deviceX/out_altvoltageX_scale_available
|
||||
What: /sys/.../iio:deviceX/in_capacitance_scale_available
|
||||
KernelVersion: 2.635
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
|
@ -297,14 +299,19 @@ Description:
|
|||
gives the 3dB frequency of the filter in Hz.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_voltageY_raw
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_altvoltageY_raw
|
||||
KernelVersion: 2.6.37
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Raw (unscaled, no bias etc.) output voltage for
|
||||
channel Y. The number must always be specified and
|
||||
unique if the output corresponds to a single channel.
|
||||
While DAC like devices typically use out_voltage,
|
||||
a continuous frequency generating device, such as
|
||||
a DDS or PLL should use out_altvoltage.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_voltageY&Z_raw
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_altvoltageY&Z_raw
|
||||
KernelVersion: 2.6.37
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
|
@ -315,6 +322,8 @@ Description:
|
|||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_voltageY_powerdown_mode
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_voltage_powerdown_mode
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_altvoltageY_powerdown_mode
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_altvoltage_powerdown_mode
|
||||
KernelVersion: 2.6.38
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
|
@ -331,6 +340,8 @@ Description:
|
|||
|
||||
What: /sys/.../iio:deviceX/out_votlageY_powerdown_mode_available
|
||||
What: /sys/.../iio:deviceX/out_voltage_powerdown_mode_available
|
||||
What: /sys/.../iio:deviceX/out_altvotlageY_powerdown_mode_available
|
||||
What: /sys/.../iio:deviceX/out_altvoltage_powerdown_mode_available
|
||||
KernelVersion: 2.6.38
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
|
@ -339,6 +350,8 @@ Description:
|
|||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_voltageY_powerdown
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_voltage_powerdown
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_altvoltageY_powerdown
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_altvoltage_powerdown
|
||||
KernelVersion: 2.6.38
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
|
@ -348,6 +361,24 @@ Description:
|
|||
operation. Y may be suppressed if all outputs are controlled
|
||||
together.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_altvoltageY_frequency
|
||||
KernelVersion: 3.4.0
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Output frequency for channel Y in Hz. The number must always be
|
||||
specified and unique if the output corresponds to a single
|
||||
channel.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_altvoltageY_phase
|
||||
KernelVersion: 3.4.0
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Phase in radians of one frequency/clock output Y
|
||||
(out_altvoltageY) relative to another frequency/clock output
|
||||
(out_altvoltageZ) of the device X. The number must always be
|
||||
specified and unique if the output corresponds to a single
|
||||
channel.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/events
|
||||
KernelVersion: 2.6.35
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
|
|
|
@ -724,7 +724,6 @@ static int iio_device_register_sysfs(struct iio_dev *indio_dev)
|
|||
* New channel registration method - relies on the fact a group does
|
||||
* not need to be initialized if it is name is NULL.
|
||||
*/
|
||||
INIT_LIST_HEAD(&indio_dev->channel_attr_list);
|
||||
if (indio_dev->channels)
|
||||
for (i = 0; i < indio_dev->num_channels; i++) {
|
||||
ret = iio_device_add_channel_sysfs(indio_dev,
|
||||
|
@ -788,12 +787,16 @@ static void iio_device_unregister_sysfs(struct iio_dev *indio_dev)
|
|||
static void iio_dev_release(struct device *device)
|
||||
{
|
||||
struct iio_dev *indio_dev = dev_to_iio_dev(device);
|
||||
cdev_del(&indio_dev->chrdev);
|
||||
if (indio_dev->chrdev.dev)
|
||||
cdev_del(&indio_dev->chrdev);
|
||||
if (indio_dev->modes & INDIO_BUFFER_TRIGGERED)
|
||||
iio_device_unregister_trigger_consumer(indio_dev);
|
||||
iio_device_unregister_eventset(indio_dev);
|
||||
iio_device_unregister_sysfs(indio_dev);
|
||||
iio_device_unregister_debugfs(indio_dev);
|
||||
|
||||
ida_simple_remove(&iio_ida, indio_dev->id);
|
||||
kfree(indio_dev);
|
||||
}
|
||||
|
||||
static struct device_type iio_dev_type = {
|
||||
|
@ -824,6 +827,7 @@ struct iio_dev *iio_device_alloc(int sizeof_priv)
|
|||
dev_set_drvdata(&dev->dev, (void *)dev);
|
||||
mutex_init(&dev->mlock);
|
||||
mutex_init(&dev->info_exist_lock);
|
||||
INIT_LIST_HEAD(&dev->channel_attr_list);
|
||||
|
||||
dev->id = ida_simple_get(&iio_ida, 0, 0, GFP_KERNEL);
|
||||
if (dev->id < 0) {
|
||||
|
@ -841,10 +845,8 @@ EXPORT_SYMBOL(iio_device_alloc);
|
|||
|
||||
void iio_device_free(struct iio_dev *dev)
|
||||
{
|
||||
if (dev) {
|
||||
ida_simple_remove(&iio_ida, dev->id);
|
||||
kfree(dev);
|
||||
}
|
||||
if (dev)
|
||||
put_device(&dev->dev);
|
||||
}
|
||||
EXPORT_SYMBOL(iio_device_free);
|
||||
|
||||
|
@ -965,7 +967,7 @@ void iio_device_unregister(struct iio_dev *indio_dev)
|
|||
mutex_lock(&indio_dev->info_exist_lock);
|
||||
indio_dev->info = NULL;
|
||||
mutex_unlock(&indio_dev->info_exist_lock);
|
||||
device_unregister(&indio_dev->dev);
|
||||
device_del(&indio_dev->dev);
|
||||
}
|
||||
EXPORT_SYMBOL(iio_device_unregister);
|
||||
subsys_initcall(iio_init);
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <linux/pci.h>
|
||||
#include <linux/usb.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/kconfig.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/fcntl.h>
|
||||
|
@ -1030,6 +1031,8 @@ void comedi_pci_driver_unregister(struct comedi_driver *comedi_driver,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(comedi_pci_driver_unregister);
|
||||
|
||||
#if IS_ENABLED(CONFIG_USB)
|
||||
|
||||
static int comedi_old_usb_auto_config(struct usb_interface *intf,
|
||||
struct comedi_driver *driver)
|
||||
{
|
||||
|
@ -1092,3 +1095,5 @@ void comedi_usb_driver_unregister(struct comedi_driver *comedi_driver,
|
|||
comedi_driver_unregister(comedi_driver);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(comedi_usb_driver_unregister);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -29,8 +29,6 @@ Then fill in the following:
|
|||
* info->driver_module:
|
||||
Set to THIS_MODULE. Used to ensure correct ownership
|
||||
of various resources allocate by the core.
|
||||
* info->num_interrupt_lines:
|
||||
Number of event triggering hardware lines the device has.
|
||||
* info->event_attrs:
|
||||
Attributes used to enable / disable hardware events.
|
||||
* info->attrs:
|
||||
|
|
|
@ -13,6 +13,7 @@ config AD7291
|
|||
config AD7298
|
||||
tristate "Analog Devices AD7298 ADC driver"
|
||||
depends on SPI
|
||||
select IIO_KFIFO_BUF if IIO_BUFFER
|
||||
help
|
||||
Say yes here to build support for Analog Devices AD7298
|
||||
8 Channel ADC with temperature sensor.
|
||||
|
|
|
@ -235,7 +235,8 @@ static const struct attribute_group ad7606_attribute_group_range = {
|
|||
.indexed = 1, \
|
||||
.channel = num, \
|
||||
.address = num, \
|
||||
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT, \
|
||||
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \
|
||||
IIO_CHAN_INFO_SCALE_SHARED_BIT, \
|
||||
.scan_index = num, \
|
||||
.scan_type = IIO_ST('s', 16, 16, 0), \
|
||||
}
|
||||
|
|
|
@ -208,7 +208,8 @@ static int omap_fbdev_create(struct drm_fb_helper *helper,
|
|||
*/
|
||||
ret = omap_gem_get_paddr(fbdev->bo, &paddr, true);
|
||||
if (ret) {
|
||||
dev_err(dev->dev, "could not map (paddr)!\n");
|
||||
dev_err(dev->dev,
|
||||
"could not map (paddr)! Skipping framebuffer alloc\n");
|
||||
ret = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
@ -388,8 +389,11 @@ void omap_fbdev_free(struct drm_device *dev)
|
|||
|
||||
fbi = helper->fbdev;
|
||||
|
||||
unregister_framebuffer(fbi);
|
||||
framebuffer_release(fbi);
|
||||
/* only cleanup framebuffer if it is present */
|
||||
if (fbi) {
|
||||
unregister_framebuffer(fbi);
|
||||
framebuffer_release(fbi);
|
||||
}
|
||||
|
||||
drm_fb_helper_fini(helper);
|
||||
|
||||
|
|
|
@ -258,7 +258,7 @@ fail:
|
|||
return rc;
|
||||
}
|
||||
|
||||
int pstore_fill_super(struct super_block *sb, void *data, int silent)
|
||||
static int pstore_fill_super(struct super_block *sb, void *data, int silent)
|
||||
{
|
||||
struct inode *inode;
|
||||
|
||||
|
|
|
@ -106,6 +106,8 @@ static ssize_t ramoops_pstore_read(u64 *id, enum pstore_type_id *type,
|
|||
time->tv_sec = 0;
|
||||
time->tv_nsec = 0;
|
||||
|
||||
/* Update old/shadowed buffer. */
|
||||
persistent_ram_save_old(prz);
|
||||
size = persistent_ram_old_size(prz);
|
||||
*buf = kmalloc(size, GFP_KERNEL);
|
||||
if (*buf == NULL)
|
||||
|
@ -184,6 +186,7 @@ static int ramoops_pstore_erase(enum pstore_type_id type, u64 id,
|
|||
return -EINVAL;
|
||||
|
||||
persistent_ram_free_old(cxt->przs[id]);
|
||||
persistent_ram_zap(cxt->przs[id]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -250,23 +250,24 @@ static void notrace persistent_ram_update(struct persistent_ram_zone *prz,
|
|||
persistent_ram_update_ecc(prz, start, count);
|
||||
}
|
||||
|
||||
static void __init
|
||||
persistent_ram_save_old(struct persistent_ram_zone *prz)
|
||||
void persistent_ram_save_old(struct persistent_ram_zone *prz)
|
||||
{
|
||||
struct persistent_ram_buffer *buffer = prz->buffer;
|
||||
size_t size = buffer_size(prz);
|
||||
size_t start = buffer_start(prz);
|
||||
char *dest;
|
||||
|
||||
persistent_ram_ecc_old(prz);
|
||||
if (!size)
|
||||
return;
|
||||
|
||||
dest = kmalloc(size, GFP_KERNEL);
|
||||
if (dest == NULL) {
|
||||
if (!prz->old_log) {
|
||||
persistent_ram_ecc_old(prz);
|
||||
prz->old_log = kmalloc(size, GFP_KERNEL);
|
||||
}
|
||||
if (!prz->old_log) {
|
||||
pr_err("persistent_ram: failed to allocate buffer\n");
|
||||
return;
|
||||
}
|
||||
|
||||
prz->old_log = dest;
|
||||
prz->old_log_size = size;
|
||||
memcpy(prz->old_log, &buffer->data[start], size - start);
|
||||
memcpy(prz->old_log + size - start, &buffer->data[0], start);
|
||||
|
@ -319,6 +320,13 @@ void persistent_ram_free_old(struct persistent_ram_zone *prz)
|
|||
prz->old_log_size = 0;
|
||||
}
|
||||
|
||||
void persistent_ram_zap(struct persistent_ram_zone *prz)
|
||||
{
|
||||
atomic_set(&prz->buffer->start, 0);
|
||||
atomic_set(&prz->buffer->size, 0);
|
||||
persistent_ram_update_header_ecc(prz);
|
||||
}
|
||||
|
||||
static void *persistent_ram_vmap(phys_addr_t start, size_t size)
|
||||
{
|
||||
struct page **pages;
|
||||
|
@ -405,6 +413,7 @@ static int __init persistent_ram_post_init(struct persistent_ram_zone *prz, bool
|
|||
" size %zu, start %zu\n",
|
||||
buffer_size(prz), buffer_start(prz));
|
||||
persistent_ram_save_old(prz);
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
pr_info("persistent_ram: no valid data in buffer"
|
||||
|
@ -412,8 +421,7 @@ static int __init persistent_ram_post_init(struct persistent_ram_zone *prz, bool
|
|||
}
|
||||
|
||||
prz->buffer->sig = PERSISTENT_RAM_SIG;
|
||||
atomic_set(&prz->buffer->start, 0);
|
||||
atomic_set(&prz->buffer->size, 0);
|
||||
persistent_ram_zap(prz);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -448,7 +456,6 @@ struct persistent_ram_zone * __init persistent_ram_new(phys_addr_t start,
|
|||
goto err;
|
||||
|
||||
persistent_ram_post_init(prz, ecc);
|
||||
persistent_ram_update_header_ecc(prz);
|
||||
|
||||
return prz;
|
||||
err:
|
||||
|
|
|
@ -69,12 +69,14 @@ struct persistent_ram_zone * __init persistent_ram_new(phys_addr_t start,
|
|||
size_t size,
|
||||
bool ecc);
|
||||
void persistent_ram_free(struct persistent_ram_zone *prz);
|
||||
void persistent_ram_zap(struct persistent_ram_zone *prz);
|
||||
struct persistent_ram_zone *persistent_ram_init_ringbuffer(struct device *dev,
|
||||
bool ecc);
|
||||
|
||||
int persistent_ram_write(struct persistent_ram_zone *prz, const void *s,
|
||||
unsigned int count);
|
||||
|
||||
void persistent_ram_save_old(struct persistent_ram_zone *prz);
|
||||
size_t persistent_ram_old_size(struct persistent_ram_zone *prz);
|
||||
void *persistent_ram_old(struct persistent_ram_zone *prz);
|
||||
void persistent_ram_free_old(struct persistent_ram_zone *prz);
|
||||
|
|
Загрузка…
Ссылка в новой задаче