mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
char/misc patches for 4.12-rc1
Here is the big set of new char/misc driver drivers and features for 4.12-rc1. There's lots of new drivers added this time around, new firmware drivers from Google, more auxdisplay drivers, extcon drivers, fpga drivers, and a bunch of other driver updates. Nothing major, except if you happen to have the hardware for these drivers, and then you will be happy :) All of these have been in linux-next for a while with no reported issues. Signed-off-by: Greg Kroah-Hartman <[email protected]> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCWQvAgg8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+yknsACgzkAeyz16Z97J3UTaeejbR7nKUCAAoKY4WEHY 8O9f9pr9gj8GMBwxeZQa =OIfB -----END PGP SIGNATURE----- Merge tag 'char-misc-4.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc Pull char/misc driver updates from Greg KH: "Here is the big set of new char/misc driver drivers and features for 4.12-rc1. There's lots of new drivers added this time around, new firmware drivers from Google, more auxdisplay drivers, extcon drivers, fpga drivers, and a bunch of other driver updates. Nothing major, except if you happen to have the hardware for these drivers, and then you will be happy :) All of these have been in linux-next for a while with no reported issues" * tag 'char-misc-4.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (136 commits) firmware: google memconsole: Fix return value check in platform_memconsole_init() firmware: Google VPD: Fix return value check in vpd_platform_init() goldfish_pipe: fix build warning about using too much stack. goldfish_pipe: An implementation of more parallel pipe fpga fr br: update supported version numbers fpga: region: release FPGA region reference in error path fpga altera-hps2fpga: disable/unprepare clock on error in alt_fpga_bridge_probe() mei: drop the TODO from samples firmware: Google VPD sysfs driver firmware: Google VPD: import lib_vpd source files misc: lkdtm: Add volatile to intentional NULL pointer reference eeprom: idt_89hpesx: Add OF device ID table misc: ds1682: Add OF device ID table misc: tsl2550: Add OF device ID table w1: Remove unneeded use of assert() and remove w1_log.h w1: Use kernel common min() implementation uio_mf624: Align memory regions to page size and set correct offsets uio_mf624: Refactor memory info initialization uio: Allow handling of non page-aligned memory regions hangcheck-timer: Fix typo in comment ...
This commit is contained in:
commit
af82455f7d
166 changed files with 8064 additions and 3259 deletions
|
|
@ -2444,31 +2444,25 @@ static struct mport_dev *mport_cdev_add(struct rio_mport *mport)
|
|||
mutex_init(&md->buf_mutex);
|
||||
mutex_init(&md->file_mutex);
|
||||
INIT_LIST_HEAD(&md->file_list);
|
||||
cdev_init(&md->cdev, &mport_fops);
|
||||
md->cdev.owner = THIS_MODULE;
|
||||
ret = cdev_add(&md->cdev, MKDEV(MAJOR(dev_number), mport->id), 1);
|
||||
if (ret < 0) {
|
||||
kfree(md);
|
||||
rmcd_error("Unable to register a device, err=%d", ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
md->dev.devt = md->cdev.dev;
|
||||
device_initialize(&md->dev);
|
||||
md->dev.devt = MKDEV(MAJOR(dev_number), mport->id);
|
||||
md->dev.class = dev_class;
|
||||
md->dev.parent = &mport->dev;
|
||||
md->dev.release = mport_device_release;
|
||||
dev_set_name(&md->dev, DEV_NAME "%d", mport->id);
|
||||
atomic_set(&md->active, 1);
|
||||
|
||||
ret = device_register(&md->dev);
|
||||
cdev_init(&md->cdev, &mport_fops);
|
||||
md->cdev.owner = THIS_MODULE;
|
||||
|
||||
ret = cdev_device_add(&md->cdev, &md->dev);
|
||||
if (ret) {
|
||||
rmcd_error("Failed to register mport %d (err=%d)",
|
||||
mport->id, ret);
|
||||
goto err_cdev;
|
||||
}
|
||||
|
||||
get_device(&md->dev);
|
||||
|
||||
INIT_LIST_HEAD(&md->doorbells);
|
||||
spin_lock_init(&md->db_lock);
|
||||
INIT_LIST_HEAD(&md->portwrites);
|
||||
|
|
@ -2513,8 +2507,7 @@ static struct mport_dev *mport_cdev_add(struct rio_mport *mport)
|
|||
return md;
|
||||
|
||||
err_cdev:
|
||||
cdev_del(&md->cdev);
|
||||
kfree(md);
|
||||
put_device(&md->dev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -2578,7 +2571,7 @@ static void mport_cdev_remove(struct mport_dev *md)
|
|||
atomic_set(&md->active, 0);
|
||||
mport_cdev_terminate_dma(md);
|
||||
rio_del_mport_pw_handler(md->mport, md, rio_mport_pw_handler);
|
||||
cdev_del(&(md->cdev));
|
||||
cdev_device_del(&md->cdev, &md->dev);
|
||||
mport_cdev_kill_fasync(md);
|
||||
|
||||
flush_workqueue(dma_wq);
|
||||
|
|
@ -2603,7 +2596,6 @@ static void mport_cdev_remove(struct mport_dev *md)
|
|||
|
||||
rio_release_inb_dbell(md->mport, 0, 0x0fff);
|
||||
|
||||
device_unregister(&md->dev);
|
||||
put_device(&md->dev);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -108,15 +108,11 @@ static struct attribute *rio_dev_attrs[] = {
|
|||
&dev_attr_lprev.attr,
|
||||
&dev_attr_destid.attr,
|
||||
&dev_attr_modalias.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const struct attribute_group rio_dev_group = {
|
||||
.attrs = rio_dev_attrs,
|
||||
};
|
||||
|
||||
const struct attribute_group *rio_dev_groups[] = {
|
||||
&rio_dev_group,
|
||||
/* Switch-only attributes */
|
||||
&dev_attr_routes.attr,
|
||||
&dev_attr_lnext.attr,
|
||||
&dev_attr_hopcount.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
|
@ -259,46 +255,40 @@ static struct bin_attribute rio_config_attr = {
|
|||
.write = rio_write_config,
|
||||
};
|
||||
|
||||
/**
|
||||
* rio_create_sysfs_dev_files - create RIO specific sysfs files
|
||||
* @rdev: device whose entries should be created
|
||||
*
|
||||
* Create files when @rdev is added to sysfs.
|
||||
*/
|
||||
int rio_create_sysfs_dev_files(struct rio_dev *rdev)
|
||||
static struct bin_attribute *rio_dev_bin_attrs[] = {
|
||||
&rio_config_attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static umode_t rio_dev_is_attr_visible(struct kobject *kobj,
|
||||
struct attribute *attr, int n)
|
||||
{
|
||||
int err = 0;
|
||||
struct rio_dev *rdev = to_rio_dev(kobj_to_dev(kobj));
|
||||
umode_t mode = attr->mode;
|
||||
|
||||
err = device_create_bin_file(&rdev->dev, &rio_config_attr);
|
||||
|
||||
if (!err && (rdev->pef & RIO_PEF_SWITCH)) {
|
||||
err |= device_create_file(&rdev->dev, &dev_attr_routes);
|
||||
err |= device_create_file(&rdev->dev, &dev_attr_lnext);
|
||||
err |= device_create_file(&rdev->dev, &dev_attr_hopcount);
|
||||
if (!(rdev->pef & RIO_PEF_SWITCH) &&
|
||||
(attr == &dev_attr_routes.attr ||
|
||||
attr == &dev_attr_lnext.attr ||
|
||||
attr == &dev_attr_hopcount.attr)) {
|
||||
/*
|
||||
* Hide switch-specific attributes for a non-switch device.
|
||||
*/
|
||||
mode = 0;
|
||||
}
|
||||
|
||||
if (err)
|
||||
pr_warning("RIO: Failed to create attribute file(s) for %s\n",
|
||||
rio_name(rdev));
|
||||
|
||||
return err;
|
||||
return mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* rio_remove_sysfs_dev_files - cleanup RIO specific sysfs files
|
||||
* @rdev: device whose entries we should free
|
||||
*
|
||||
* Cleanup when @rdev is removed from sysfs.
|
||||
*/
|
||||
void rio_remove_sysfs_dev_files(struct rio_dev *rdev)
|
||||
{
|
||||
device_remove_bin_file(&rdev->dev, &rio_config_attr);
|
||||
if (rdev->pef & RIO_PEF_SWITCH) {
|
||||
device_remove_file(&rdev->dev, &dev_attr_routes);
|
||||
device_remove_file(&rdev->dev, &dev_attr_lnext);
|
||||
device_remove_file(&rdev->dev, &dev_attr_hopcount);
|
||||
}
|
||||
}
|
||||
static const struct attribute_group rio_dev_group = {
|
||||
.attrs = rio_dev_attrs,
|
||||
.is_visible = rio_dev_is_attr_visible,
|
||||
.bin_attrs = rio_dev_bin_attrs,
|
||||
};
|
||||
|
||||
const struct attribute_group *rio_dev_groups[] = {
|
||||
&rio_dev_group,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static ssize_t bus_scan_store(struct bus_type *bus, const char *buf,
|
||||
size_t count)
|
||||
|
|
|
|||
|
|
@ -192,8 +192,6 @@ int rio_add_device(struct rio_dev *rdev)
|
|||
}
|
||||
spin_unlock(&rio_global_list_lock);
|
||||
|
||||
rio_create_sysfs_dev_files(rdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_add_device);
|
||||
|
|
@ -220,7 +218,6 @@ void rio_del_device(struct rio_dev *rdev, enum rio_device_state state)
|
|||
}
|
||||
}
|
||||
spin_unlock(&rio_global_list_lock);
|
||||
rio_remove_sysfs_dev_files(rdev);
|
||||
device_unregister(&rdev->dev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_del_device);
|
||||
|
|
|
|||
|
|
@ -27,8 +27,6 @@ extern u32 rio_mport_get_efb(struct rio_mport *port, int local, u16 destid,
|
|||
u8 hopcount, u32 from);
|
||||
extern int rio_mport_chk_dev_access(struct rio_mport *mport, u16 destid,
|
||||
u8 hopcount);
|
||||
extern int rio_create_sysfs_dev_files(struct rio_dev *rdev);
|
||||
extern void rio_remove_sysfs_dev_files(struct rio_dev *rdev);
|
||||
extern int rio_lock_device(struct rio_mport *port, u16 destid,
|
||||
u8 hopcount, int wait_ms);
|
||||
extern int rio_unlock_device(struct rio_mport *port, u16 destid, u8 hopcount);
|
||||
|
|
|
|||
Loading…
Reference in a new issue