]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge 3.7-rc3 into staging-next
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 29 Oct 2012 15:37:12 +0000 (08:37 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 29 Oct 2012 15:37:12 +0000 (08:37 -0700)
This resolves the conflict with:
drivers/staging/comedi/drivers/amplc_dio200.c
and syncs up the changes that happened in the staging directory for
3.7-rc3.

Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
15 files changed:
1  2 
drivers/staging/android/binder.c
drivers/staging/comedi/drivers/8255_pci.c
drivers/staging/comedi/drivers/amplc_pc236.c
drivers/staging/comedi/drivers/amplc_pc263.c
drivers/staging/comedi/drivers/das08.c
drivers/staging/comedi/drivers/ni_labpc.c
drivers/staging/iio/accel/adis16201_core.c
drivers/staging/iio/accel/adis16203_core.c
drivers/staging/iio/accel/adis16204_core.c
drivers/staging/iio/accel/adis16209_core.c
drivers/staging/iio/accel/adis16220_core.c
drivers/staging/iio/accel/adis16240_core.c
drivers/staging/iio/gyro/adis16260_core.c
drivers/staging/iio/imu/adis16400_core.c
drivers/staging/omapdrm/omap_gem.c

index b7cfcdbcbeb34c8ba7ba3636f81e1d5cb8baf9ac,5d4610babd8a6a48e4d5ac161a04db7322ad2892..9fbc06e5012ecdb70f7825896bcb156b86469d58
@@@ -35,9 -35,8 +35,9 @@@
  #include <linux/slab.h>
  
  #include "binder.h"
 +#include "binder_trace.h"
  
 -static DEFINE_MUTEX(binder_lock);
 +static DEFINE_MUTEX(binder_main_lock);
  static DEFINE_MUTEX(binder_deferred_lock);
  static DEFINE_MUTEX(binder_mmap_lock);
  
@@@ -412,19 -411,6 +412,19 @@@ static long task_close_fd(struct binder
        return retval;
  }
  
 +static inline void binder_lock(const char *tag)
 +{
 +      trace_binder_lock(tag);
 +      mutex_lock(&binder_main_lock);
 +      trace_binder_locked(tag);
 +}
 +
 +static inline void binder_unlock(const char *tag)
 +{
 +      trace_binder_unlock(tag);
 +      mutex_unlock(&binder_main_lock);
 +}
 +
  static void binder_set_nice(long nice)
  {
        long min_nice;
@@@ -551,8 -537,6 +551,8 @@@ static int binder_update_page_range(str
        if (end <= start)
                return 0;
  
 +      trace_binder_update_page_range(proc, allocate, start, end);
 +
        if (vma)
                mm = NULL;
        else
                page = &proc->pages[(page_addr - proc->buffer) / PAGE_SIZE];
  
                BUG_ON(*page);
-               *page = alloc_page(GFP_KERNEL | __GFP_ZERO);
+               *page = alloc_page(GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO);
                if (*page == NULL) {
                        pr_err("binder: %d: binder_alloc_buf failed "
                               "for page at %p\n", proc->pid, page_addr);
@@@ -1477,9 -1461,6 +1477,9 @@@ static void binder_transaction(struct b
        t->code = tr->code;
        t->flags = tr->flags;
        t->priority = task_nice(current);
 +
 +      trace_binder_transaction(reply, t, target_node);
 +
        t->buffer = binder_alloc_buf(target_proc, tr->data_size,
                tr->offsets_size, !reply && (t->flags & TF_ONE_WAY));
        if (t->buffer == NULL) {
        t->buffer->debug_id = t->debug_id;
        t->buffer->transaction = t;
        t->buffer->target_node = target_node;
 +      trace_binder_transaction_alloc_buf(t->buffer);
        if (target_node)
                binder_inc_node(target_node, 1, 0, NULL);
  
                        binder_inc_ref(ref, fp->type == BINDER_TYPE_HANDLE,
                                       &thread->todo);
  
 +                      trace_binder_transaction_node_to_ref(t, node, ref);
                        binder_debug(BINDER_DEBUG_TRANSACTION,
                                     "        node %d u%p -> ref %d desc %d\n",
                                     node->debug_id, node->ptr, ref->debug_id,
                                fp->binder = ref->node->ptr;
                                fp->cookie = ref->node->cookie;
                                binder_inc_node(ref->node, fp->type == BINDER_TYPE_BINDER, 0, NULL);
 +                              trace_binder_transaction_ref_to_node(t, ref);
                                binder_debug(BINDER_DEBUG_TRANSACTION,
                                             "        ref %d desc %d -> node %d u%p\n",
                                             ref->debug_id, ref->desc, ref->node->debug_id,
                                }
                                fp->handle = new_ref->desc;
                                binder_inc_ref(new_ref, fp->type == BINDER_TYPE_HANDLE, NULL);
 +                              trace_binder_transaction_ref_to_ref(t, ref,
 +                                                                  new_ref);
                                binder_debug(BINDER_DEBUG_TRANSACTION,
                                             "        ref %d desc %d -> ref %d desc %d (node %d)\n",
                                             ref->debug_id, ref->desc, new_ref->debug_id,
                                goto err_get_unused_fd_failed;
                        }
                        task_fd_install(target_proc, target_fd, file);
 +                      trace_binder_transaction_fd(t, fp->handle, target_fd);
                        binder_debug(BINDER_DEBUG_TRANSACTION,
                                     "        fd %ld -> %d\n", fp->handle, target_fd);
                        /* TODO: fput? */
@@@ -1692,7 -1667,6 +1692,7 @@@ err_binder_new_node_failed
  err_bad_object_type:
  err_bad_offset:
  err_copy_data_failed:
 +      trace_binder_transaction_failed_buffer_release(t->buffer);
        binder_transaction_buffer_release(target_proc, t->buffer, offp);
        t->buffer->transaction = NULL;
        binder_free_buf(target_proc, t->buffer);
@@@ -1738,7 -1712,6 +1738,7 @@@ int binder_thread_write(struct binder_p
                if (get_user(cmd, (uint32_t __user *)ptr))
                        return -EFAULT;
                ptr += sizeof(uint32_t);
 +              trace_binder_command(cmd);
                if (_IOC_NR(cmd) < ARRAY_SIZE(binder_stats.bc)) {
                        binder_stats.bc[_IOC_NR(cmd)]++;
                        proc->stats.bc[_IOC_NR(cmd)]++;
                                else
                                        list_move_tail(buffer->target_node->async_todo.next, &thread->todo);
                        }
 +                      trace_binder_transaction_buffer_release(buffer);
                        binder_transaction_buffer_release(proc, buffer, NULL);
                        binder_free_buf(proc, buffer);
                        break;
  void binder_stat_br(struct binder_proc *proc, struct binder_thread *thread,
                    uint32_t cmd)
  {
 +      trace_binder_return(cmd);
        if (_IOC_NR(cmd) < ARRAY_SIZE(binder_stats.br)) {
                binder_stats.br[_IOC_NR(cmd)]++;
                proc->stats.br[_IOC_NR(cmd)]++;
@@@ -2164,7 -2135,6 +2164,7 @@@ retry
                        if (put_user(thread->return_error2, (uint32_t __user *)ptr))
                                return -EFAULT;
                        ptr += sizeof(uint32_t);
 +                      binder_stat_br(proc, thread, thread->return_error2);
                        if (ptr == end)
                                goto done;
                        thread->return_error2 = BR_OK;
                if (put_user(thread->return_error, (uint32_t __user *)ptr))
                        return -EFAULT;
                ptr += sizeof(uint32_t);
 +              binder_stat_br(proc, thread, thread->return_error);
                thread->return_error = BR_OK;
                goto done;
        }
        thread->looper |= BINDER_LOOPER_STATE_WAITING;
        if (wait_for_proc_work)
                proc->ready_threads++;
 -      mutex_unlock(&binder_lock);
 +
 +      binder_unlock(__func__);
 +
 +      trace_binder_wait_for_work(wait_for_proc_work,
 +                                 !!thread->transaction_stack,
 +                                 !list_empty(&thread->todo));
        if (wait_for_proc_work) {
                if (!(thread->looper & (BINDER_LOOPER_STATE_REGISTERED |
                                        BINDER_LOOPER_STATE_ENTERED))) {
                } else
                        ret = wait_event_interruptible(thread->wait, binder_has_thread_work(thread));
        }
 -      mutex_lock(&binder_lock);
 +
 +      binder_lock(__func__);
 +
        if (wait_for_proc_work)
                proc->ready_threads--;
        thread->looper &= ~BINDER_LOOPER_STATE_WAITING;
                        if (put_user(death->cookie, (void * __user *)ptr))
                                return -EFAULT;
                        ptr += sizeof(void *);
 +                      binder_stat_br(proc, thread, cmd);
                        binder_debug(BINDER_DEBUG_DEATH_NOTIFICATION,
                                     "binder: %d:%d %s %p\n",
                                      proc->pid, thread->pid,
                        return -EFAULT;
                ptr += sizeof(tr);
  
 +              trace_binder_transaction_received(t);
                binder_stat_br(proc, thread, cmd);
                binder_debug(BINDER_DEBUG_TRANSACTION,
                             "binder: %d:%d %s %d %d:%d, cmd %d"
@@@ -2444,7 -2404,6 +2444,7 @@@ done
                             proc->pid, thread->pid);
                if (put_user(BR_SPAWN_LOOPER, (uint32_t __user *)buffer))
                        return -EFAULT;
 +              binder_stat_br(proc, thread, BR_SPAWN_LOOPER);
        }
        return 0;
  }
@@@ -2460,14 -2419,38 +2460,38 @@@ static void binder_release_work(struct 
                        struct binder_transaction *t;
  
                        t = container_of(w, struct binder_transaction, work);
-                       if (t->buffer->target_node && !(t->flags & TF_ONE_WAY))
+                       if (t->buffer->target_node &&
+                           !(t->flags & TF_ONE_WAY)) {
                                binder_send_failed_reply(t, BR_DEAD_REPLY);
+                       } else {
+                               binder_debug(BINDER_DEBUG_DEAD_TRANSACTION,
+                                       "binder: undelivered transaction %d\n",
+                                       t->debug_id);
+                               t->buffer->transaction = NULL;
+                               kfree(t);
+                               binder_stats_deleted(BINDER_STAT_TRANSACTION);
+                       }
                } break;
                case BINDER_WORK_TRANSACTION_COMPLETE: {
+                       binder_debug(BINDER_DEBUG_DEAD_TRANSACTION,
+                               "binder: undelivered TRANSACTION_COMPLETE\n");
                        kfree(w);
                        binder_stats_deleted(BINDER_STAT_TRANSACTION_COMPLETE);
                } break;
+               case BINDER_WORK_DEAD_BINDER_AND_CLEAR:
+               case BINDER_WORK_CLEAR_DEATH_NOTIFICATION: {
+                       struct binder_ref_death *death;
+                       death = container_of(w, struct binder_ref_death, work);
+                       binder_debug(BINDER_DEBUG_DEAD_TRANSACTION,
+                               "binder: undelivered death notification, %p\n",
+                               death->cookie);
+                       kfree(death);
+                       binder_stats_deleted(BINDER_STAT_DEATH);
+               } break;
                default:
+                       pr_err("binder: unexpected work type, %d, not freed\n",
+                              w->type);
                        break;
                }
        }
@@@ -2557,14 -2540,12 +2581,14 @@@ static unsigned int binder_poll(struct 
        struct binder_thread *thread = NULL;
        int wait_for_proc_work;
  
 -      mutex_lock(&binder_lock);
 +      binder_lock(__func__);
 +
        thread = binder_get_thread(proc);
  
        wait_for_proc_work = thread->transaction_stack == NULL &&
                list_empty(&thread->todo) && thread->return_error == BR_OK;
 -      mutex_unlock(&binder_lock);
 +
 +      binder_unlock(__func__);
  
        if (wait_for_proc_work) {
                if (binder_has_proc_work(proc, thread))
@@@ -2592,13 -2573,11 +2616,13 @@@ static long binder_ioctl(struct file *f
  
        /*pr_info("binder_ioctl: %d:%d %x %lx\n", proc->pid, current->pid, cmd, arg);*/
  
 +      trace_binder_ioctl(cmd, arg);
 +
        ret = wait_event_interruptible(binder_user_error_wait, binder_stop_on_user_error < 2);
        if (ret)
 -              return ret;
 +              goto err_unlocked;
  
 -      mutex_lock(&binder_lock);
 +      binder_lock(__func__);
        thread = binder_get_thread(proc);
        if (thread == NULL) {
                ret = -ENOMEM;
  
                if (bwr.write_size > 0) {
                        ret = binder_thread_write(proc, thread, (void __user *)bwr.write_buffer, bwr.write_size, &bwr.write_consumed);
 +                      trace_binder_write_done(ret);
                        if (ret < 0) {
                                bwr.read_consumed = 0;
                                if (copy_to_user(ubuf, &bwr, sizeof(bwr)))
                }
                if (bwr.read_size > 0) {
                        ret = binder_thread_read(proc, thread, (void __user *)bwr.read_buffer, bwr.read_size, &bwr.read_consumed, filp->f_flags & O_NONBLOCK);
 +                      trace_binder_read_done(ret);
                        if (!list_empty(&proc->todo))
                                wake_up_interruptible(&proc->wait);
                        if (ret < 0) {
  err:
        if (thread)
                thread->looper &= ~BINDER_LOOPER_STATE_NEED_RETURN;
 -      mutex_unlock(&binder_lock);
 +      binder_unlock(__func__);
        wait_event_interruptible(binder_user_error_wait, binder_stop_on_user_error < 2);
        if (ret && ret != -ERESTARTSYS)
                pr_info("binder: %d:%d ioctl %x %lx returned %d\n", proc->pid, current->pid, cmd, arg, ret);
 +err_unlocked:
 +      trace_binder_ioctl_done(ret);
        return ret;
  }
  
@@@ -2860,16 -2835,13 +2884,16 @@@ static int binder_open(struct inode *no
        INIT_LIST_HEAD(&proc->todo);
        init_waitqueue_head(&proc->wait);
        proc->default_priority = task_nice(current);
 -      mutex_lock(&binder_lock);
 +
 +      binder_lock(__func__);
 +
        binder_stats_created(BINDER_STAT_PROC);
        hlist_add_head(&proc->proc_node, &binder_procs);
        proc->pid = current->group_leader->pid;
        INIT_LIST_HEAD(&proc->delivered_death);
        filp->private_data = proc;
 -      mutex_unlock(&binder_lock);
 +
 +      binder_unlock(__func__);
  
        if (binder_debugfs_dir_entry_proc) {
                char strbuf[11];
@@@ -2951,6 -2923,7 +2975,7 @@@ static void binder_deferred_release(str
                nodes++;
                rb_erase(&node->rb_node, &proc->nodes);
                list_del_init(&node->work.entry);
+               binder_release_work(&node->async_todo);
                if (hlist_empty(&node->refs)) {
                        kfree(node);
                        binder_stats_deleted(BINDER_STAT_NODE);
                binder_delete_ref(ref);
        }
        binder_release_work(&proc->todo);
+       binder_release_work(&proc->delivered_death);
        buffers = 0;
  
        while ((n = rb_first(&proc->allocated_buffers))) {
@@@ -3049,7 -3023,7 +3075,7 @@@ static void binder_deferred_func(struc
  
        int defer;
        do {
 -              mutex_lock(&binder_lock);
 +              binder_lock(__func__);
                mutex_lock(&binder_deferred_lock);
                if (!hlist_empty(&binder_deferred_list)) {
                        proc = hlist_entry(binder_deferred_list.first,
                if (defer & BINDER_DEFERRED_RELEASE)
                        binder_deferred_release(proc); /* frees proc */
  
 -              mutex_unlock(&binder_lock);
 +              binder_unlock(__func__);
                if (files)
                        put_files_struct(files);
        } while (proc);
@@@ -3417,7 -3391,7 +3443,7 @@@ static int binder_state_show(struct seq
        int do_lock = !binder_debug_no_lock;
  
        if (do_lock)
 -              mutex_lock(&binder_lock);
 +              binder_lock(__func__);
  
        seq_puts(m, "binder state:\n");
  
        hlist_for_each_entry(proc, pos, &binder_procs, proc_node)
                print_binder_proc(m, proc, 1);
        if (do_lock)
 -              mutex_unlock(&binder_lock);
 +              binder_unlock(__func__);
        return 0;
  }
  
@@@ -3440,7 -3414,7 +3466,7 @@@ static int binder_stats_show(struct seq
        int do_lock = !binder_debug_no_lock;
  
        if (do_lock)
 -              mutex_lock(&binder_lock);
 +              binder_lock(__func__);
  
        seq_puts(m, "binder stats:\n");
  
        hlist_for_each_entry(proc, pos, &binder_procs, proc_node)
                print_binder_proc_stats(m, proc);
        if (do_lock)
 -              mutex_unlock(&binder_lock);
 +              binder_unlock(__func__);
        return 0;
  }
  
@@@ -3460,13 -3434,13 +3486,13 @@@ static int binder_transactions_show(str
        int do_lock = !binder_debug_no_lock;
  
        if (do_lock)
 -              mutex_lock(&binder_lock);
 +              binder_lock(__func__);
  
        seq_puts(m, "binder transactions:\n");
        hlist_for_each_entry(proc, pos, &binder_procs, proc_node)
                print_binder_proc(m, proc, 0);
        if (do_lock)
 -              mutex_unlock(&binder_lock);
 +              binder_unlock(__func__);
        return 0;
  }
  
@@@ -3476,11 -3450,11 +3502,11 @@@ static int binder_proc_show(struct seq_
        int do_lock = !binder_debug_no_lock;
  
        if (do_lock)
 -              mutex_lock(&binder_lock);
 +              binder_lock(__func__);
        seq_puts(m, "binder proc state:\n");
        print_binder_proc(m, proc, 1);
        if (do_lock)
 -              mutex_unlock(&binder_lock);
 +              binder_unlock(__func__);
        return 0;
  }
  
@@@ -3575,7 -3549,4 +3601,7 @@@ static int __init binder_init(void
  
  device_initcall(binder_init);
  
 +#define CREATE_TRACE_POINTS
 +#include "binder_trace.h"
 +
  MODULE_LICENSE("GPL v2");
index d9b46a10838c93e839e20709609b4e532e9f777d,d00aff6671df961c475f41bb3bb3141b41d5f83f..2bb98d478f34a92282222c1427310aa74787df13
@@@ -65,6 -65,9 +65,6 @@@ Configuration Options: not applicable, 
  #define PCI_DEVICE_ID_ADLINK_PCI7248  0x7248
  #define PCI_DEVICE_ID_ADLINK_PCI7296  0x7296
  
 -/* ComputerBoards is now known as Measurement Computing */
 -#define PCI_VENDOR_ID_CB              0x1307
 -
  #define PCI_DEVICE_ID_CB_PCIDIO48H    0x000b
  #define PCI_DEVICE_ID_CB_PCIDIO24H    0x0014
  #define PCI_DEVICE_ID_CB_PCIDIO96H    0x0017
@@@ -224,16 -227,18 +224,16 @@@ static int pci_8255_attach_pci(struct c
        int ret;
        int i;
  
 -      comedi_set_hw_dev(dev, &pcidev->dev);
 -
        board = pci_8255_find_boardinfo(dev, pcidev);
        if (!board)
                return -ENODEV;
        dev->board_ptr = board;
        dev->board_name = board->name;
  
 -      ret = alloc_private(dev, sizeof(*devpriv));
 -      if (ret < 0)
 -              return ret;
 -      devpriv = dev->private;
 +      devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
 +      if (!devpriv)
 +              return -ENOMEM;
 +      dev->private = devpriv;
  
        ret = comedi_pci_enable(pcidev, dev->board_name);
        if (ret)
@@@ -284,6 -289,8 +284,8 @@@ static void pci_8255_detach(struct come
        struct comedi_subdevice *s;
        int i;
  
+       if (!board || !devpriv)
+               return;
        if (dev->subdevices) {
                for (i = 0; i < board->n_8255; i++) {
                        s = &dev->subdevices[i];
index c4516355b3470c446bf374786640c7fb63733546,4e4f3c15df87e9db99528806b15ba48c54a558c2..8b7e16ee1135d467ac6369a895dbd853835839e8
@@@ -66,6 -66,7 +66,6 @@@ unused
  #define DO_PCI        IS_ENABLED(CONFIG_COMEDI_AMPLC_PC236_PCI)
  
  /* PCI236 PCI configuration register information */
 -#define PCI_VENDOR_ID_AMPLICON 0x14dc
  #define PCI_DEVICE_ID_AMPLICON_PCI236 0x0009
  #define PCI_DEVICE_ID_INVALID 0xffff
  
@@@ -504,16 -505,14 +504,16 @@@ static int pc236_pci_common_attach(stru
  static int pc236_attach(struct comedi_device *dev, struct comedi_devconfig *it)
  {
        const struct pc236_board *thisboard = comedi_board(dev);
 +      struct pc236_private *devpriv;
        int ret;
  
        dev_info(dev->class_dev, PC236_DRIVER_NAME ": attach\n");
 -      ret = alloc_private(dev, sizeof(struct pc236_private));
 -      if (ret < 0) {
 -              dev_err(dev->class_dev, "error! out of memory!\n");
 -              return ret;
 -      }
 +
 +      devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
 +      if (!devpriv)
 +              return -ENOMEM;
 +      dev->private = devpriv;
 +
        /* Process options according to bus type. */
        if (is_isa_board(thisboard)) {
                unsigned long iobase = it->options[0];
  static int __devinit pc236_attach_pci(struct comedi_device *dev,
                                      struct pci_dev *pci_dev)
  {
 -      int ret;
 +      struct pc236_private *devpriv;
  
        if (!DO_PCI)
                return -EINVAL;
  
        dev_info(dev->class_dev, PC236_DRIVER_NAME ": attach pci %s\n",
                 pci_name(pci_dev));
 -      ret = alloc_private(dev, sizeof(struct pc236_private));
 -      if (ret < 0) {
 -              dev_err(dev->class_dev, "error! out of memory!\n");
 -              return ret;
 -      }
 +
 +      devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
 +      if (!devpriv)
 +              return -ENOMEM;
 +      dev->private = devpriv;
 +
        dev->board_ptr = pc236_find_pci_board(pci_dev);
        if (dev->board_ptr == NULL) {
                dev_err(dev->class_dev, "BUG! cannot determine board type!\n");
  static void pc236_detach(struct comedi_device *dev)
  {
        const struct pc236_board *thisboard = comedi_board(dev);
-       struct pc236_private *devpriv = dev->private;
  
-       if (devpriv)
+       if (!thisboard)
+               return;
+       if (dev->iobase)
                pc236_intr_disable(dev);
        if (dev->irq)
                free_irq(dev->irq, dev);
index 0369996a3839e9646b2e9b2396bdd3a099580b0e,d0a4c441228b405d4459f70cb264b13717c26161..6ffb39c3931445b4adb07c334479a060ef12c2bc
@@@ -52,6 -52,7 +52,6 @@@ The state of the outputs can be read
  #define DO_PCI        IS_ENABLED(CONFIG_COMEDI_AMPLC_PC263_PCI)
  
  /* PCI263 PCI configuration register information */
 -#define PCI_VENDOR_ID_AMPLICON 0x14dc
  #define PCI_DEVICE_ID_AMPLICON_PCI263 0x000c
  #define PCI_DEVICE_ID_INVALID 0xffff
  
@@@ -322,6 -323,8 +322,8 @@@ static void pc263_detach(struct comedi_
  {
        const struct pc263_board *thisboard = comedi_board(dev);
  
+       if (!thisboard)
+               return;
        if (is_isa_board(thisboard)) {
                if (dev->iobase)
                        release_region(dev->iobase, PC263_IO_SIZE);
index 03a82d2c57c3ddf7b3c99e58322da6567b37c595,c304528cfb1341293255f097620c1d1f8877c7fe..d7582b96bf1c8923e609b24d5abd53de72d084c8
@@@ -65,6 -65,7 +65,6 @@@
  #define DO_PCI IS_ENABLED(CONFIG_COMEDI_DAS08_PCI)
  #define DO_COMEDI_DRIVER_REGISTER (DO_ISA || DO_PCI)
  
 -#define PCI_VENDOR_ID_COMPUTERBOARDS 0x1307
  #define PCI_DEVICE_ID_PCIDAS08 0x29
  #define PCIDAS08_SIZE 0x54
  
@@@ -777,24 -778,21 +777,24 @@@ das08_find_pci_board(struct pci_dev *pd
  static int __devinit __maybe_unused
  das08_attach_pci(struct comedi_device *dev, struct pci_dev *pdev)
  {
 +      struct das08_private_struct *devpriv;
        unsigned long iobase;
 -      int ret;
  
        if (!DO_PCI)
                return -EINVAL;
 -      ret = alloc_private(dev, sizeof(struct das08_private_struct));
 -      if (ret < 0)
 -              return ret;
 +
 +      devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
 +      if (!devpriv)
 +              return -ENOMEM;
 +      dev->private = devpriv;
 +
        dev_info(dev->class_dev, "attach pci %s\n", pci_name(pdev));
        dev->board_ptr = das08_find_pci_board(pdev);
        if (dev->board_ptr == NULL) {
                dev_err(dev->class_dev, "BUG! cannot determine board type!\n");
                return -EINVAL;
        }
 -      comedi_set_hw_dev(dev, &pdev->dev);
 +
        /*  enable PCI device and reserve I/O spaces */
        if (comedi_pci_enable(pdev, dev->driver->driver_name)) {
                dev_err(dev->class_dev,
@@@ -811,12 -809,13 +811,12 @@@ das08_attach(struct comedi_device *dev
  {
        const struct das08_board_struct *thisboard = comedi_board(dev);
        struct das08_private_struct *devpriv;
 -      int ret;
        unsigned long iobase;
  
 -      ret = alloc_private(dev, sizeof(struct das08_private_struct));
 -      if (ret < 0)
 -              return ret;
 -      devpriv = dev->private;
 +      devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
 +      if (!devpriv)
 +              return -ENOMEM;
 +      dev->private = devpriv;
  
        dev_info(dev->class_dev, "attach\n");
        if (is_pci_board(thisboard)) {
@@@ -847,6 -846,8 +847,8 @@@ static void __maybe_unused das08_detach
  {
        const struct das08_board_struct *thisboard = comedi_board(dev);
  
+       if (!thisboard)
+               return;
        das08_common_detach(dev);
        if (is_isa_board(thisboard)) {
                if (dev->iobase)
@@@ -875,7 -876,7 +877,7 @@@ static struct comedi_driver das08_drive
  
  #if DO_PCI
  static DEFINE_PCI_DEVICE_TABLE(das08_pci_table) = {
 -      { PCI_DEVICE(PCI_VENDOR_ID_COMPUTERBOARDS, PCI_DEVICE_ID_PCIDAS08) },
 +      { PCI_DEVICE(PCI_VENDOR_ID_CB, PCI_DEVICE_ID_PCIDAS08) },
        {0}
  };
  
index 40012506334f77a670f1c7360df7f0ef9e92dfd5,b5a19a0863fbb8ba3e7fe2842f66b0611992b054..ab51c2678b9d425762d182951d6a183ba0cb585f
@@@ -487,6 -487,8 +487,6 @@@ static const int dma_buffer_size = 0xff
  /* 2 bytes per sample */
  static const int sample_size = 2;
  
 -#define devpriv ((struct labpc_private *)dev->private)
 -
  static inline int labpc_counter_load(struct comedi_device *dev,
                                     unsigned long base_address,
                                     unsigned int counter_number,
  int labpc_common_attach(struct comedi_device *dev, unsigned long iobase,
                        unsigned int irq, unsigned int dma_chan)
  {
 +      struct labpc_private *devpriv = dev->private;
        struct comedi_subdevice *s;
        int i;
        unsigned long isr_flags;
@@@ -699,19 -700,15 +699,19 @@@ labpc_pci_find_boardinfo(struct pci_de
  static int __devinit labpc_attach_pci(struct comedi_device *dev,
                                      struct pci_dev *pcidev)
  {
 +      struct labpc_private *devpriv;
        unsigned long iobase;
        unsigned int irq;
        int ret;
  
        if (!IS_ENABLED(CONFIG_COMEDI_PCI_DRIVERS))
                return -ENODEV;
 -      ret = alloc_private(dev, sizeof(struct labpc_private));
 -      if (ret < 0)
 -              return ret;
 +
 +      devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
 +      if (!devpriv)
 +              return -ENOMEM;
 +      dev->private = devpriv;
 +
        dev->board_ptr = labpc_pci_find_boardinfo(pcidev);
        if (!dev->board_ptr)
                return -ENODEV;
  
  static int labpc_attach(struct comedi_device *dev, struct comedi_devconfig *it)
  {
 +      struct labpc_private *devpriv;
        unsigned long iobase = 0;
        unsigned int irq = 0;
        unsigned int dma_chan = 0;
  
 -      /* allocate and initialize dev->private */
 -      if (alloc_private(dev, sizeof(struct labpc_private)) < 0)
 +      devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
 +      if (!devpriv)
                return -ENOMEM;
 +      dev->private = devpriv;
  
        /* get base address, irq etc. based on bustype */
        switch (thisboard->bustype) {
  
  void labpc_common_detach(struct comedi_device *dev)
  {
 +      struct labpc_private *devpriv = dev->private;
        struct comedi_subdevice *s;
  
+       if (!thisboard)
+               return;
        if (dev->subdevices) {
                s = &dev->subdevices[2];
                subdev_8255_cleanup(dev, s);
@@@ -803,8 -799,6 +805,8 @@@ EXPORT_SYMBOL_GPL(labpc_common_detach)
  
  static void labpc_clear_adc_fifo(const struct comedi_device *dev)
  {
 +      struct labpc_private *devpriv = dev->private;
 +
        devpriv->write_byte(0x1, dev->iobase + ADC_CLEAR_REG);
        devpriv->read_byte(dev->iobase + ADC_FIFO_REG);
        devpriv->read_byte(dev->iobase + ADC_FIFO_REG);
  
  static int labpc_cancel(struct comedi_device *dev, struct comedi_subdevice *s)
  {
 +      struct labpc_private *devpriv = dev->private;
        unsigned long flags;
  
        spin_lock_irqsave(&dev->spinlock, flags);
@@@ -1105,7 -1098,6 +1107,7 @@@ static int labpc_ai_cmdtest(struct come
  
  static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
  {
 +      struct labpc_private *devpriv = dev->private;
        int channel, range, aref;
  #ifdef CONFIG_ISA_DMA_API
        unsigned long irq_flags;
  static irqreturn_t labpc_interrupt(int irq, void *d)
  {
        struct comedi_device *dev = d;
 +      struct labpc_private *devpriv = dev->private;
        struct comedi_subdevice *s = dev->read_subdev;
        struct comedi_async *async;
        struct comedi_cmd *cmd;
  /* read all available samples from ai fifo */
  static int labpc_drain_fifo(struct comedi_device *dev)
  {
 +      struct labpc_private *devpriv = dev->private;
        unsigned int lsb, msb;
        short data;
        struct comedi_async *async = dev->read_subdev->async;
  #ifdef CONFIG_ISA_DMA_API
  static void labpc_drain_dma(struct comedi_device *dev)
  {
 +      struct labpc_private *devpriv = dev->private;
        struct comedi_subdevice *s = dev->read_subdev;
        struct comedi_async *async = s->async;
        int status;
  
  static void handle_isa_dma(struct comedi_device *dev)
  {
 +      struct labpc_private *devpriv = dev->private;
 +
        labpc_drain_dma(dev);
  
        enable_dma(devpriv->dma_chan);
  static void labpc_drain_dregs(struct comedi_device *dev)
  {
  #ifdef CONFIG_ISA_DMA_API
 +      struct labpc_private *devpriv = dev->private;
 +
        if (devpriv->current_transfer == isa_dma_transfer)
                labpc_drain_dma(dev);
  #endif
  static int labpc_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s,
                          struct comedi_insn *insn, unsigned int *data)
  {
 +      struct labpc_private *devpriv = dev->private;
        int i, n;
        int chan, range;
        int lsb, msb;
  static int labpc_ao_winsn(struct comedi_device *dev, struct comedi_subdevice *s,
                          struct comedi_insn *insn, unsigned int *data)
  {
 +      struct labpc_private *devpriv = dev->private;
        int channel, range;
        unsigned long flags;
        int lsb, msb;
  static int labpc_ao_rinsn(struct comedi_device *dev, struct comedi_subdevice *s,
                          struct comedi_insn *insn, unsigned int *data)
  {
 +      struct labpc_private *devpriv = dev->private;
 +
        data[0] = devpriv->ao_value[CR_CHAN(insn->chanspec)];
  
        return 1;
@@@ -1723,8 -1704,6 +1725,8 @@@ static int labpc_calib_read_insn(struc
                                 struct comedi_subdevice *s,
                                 struct comedi_insn *insn, unsigned int *data)
  {
 +      struct labpc_private *devpriv = dev->private;
 +
        data[0] = devpriv->caldac[CR_CHAN(insn->chanspec)];
  
        return 1;
@@@ -1744,8 -1723,6 +1746,8 @@@ static int labpc_eeprom_read_insn(struc
                                  struct comedi_subdevice *s,
                                  struct comedi_insn *insn, unsigned int *data)
  {
 +      struct labpc_private *devpriv = dev->private;
 +
        data[0] = devpriv->eeprom_data[CR_CHAN(insn->chanspec)];
  
        return 1;
@@@ -1802,7 -1779,6 +1804,7 @@@ static unsigned int labpc_suggest_trans
  static void labpc_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd,
                             enum scan_mode mode)
  {
 +      struct labpc_private *devpriv = dev->private;
        /* max value for 16 bit counter in mode 2 */
        const int max_counter_value = 0x10000;
        /* min value for 16 bit counter in mode 2 */
@@@ -1909,7 -1885,6 +1911,7 @@@ static int labpc_dio_mem_callback(int d
  static void labpc_serial_out(struct comedi_device *dev, unsigned int value,
                             unsigned int value_width)
  {
 +      struct labpc_private *devpriv = dev->private;
        int i;
  
        for (i = 1; i <= value_width; i++) {
  /* lowlevel read from eeprom */
  static unsigned int labpc_serial_in(struct comedi_device *dev)
  {
 +      struct labpc_private *devpriv = dev->private;
        unsigned int value = 0;
        int i;
        const int value_width = 8;      /*  number of bits wide values are */
  static unsigned int labpc_eeprom_read(struct comedi_device *dev,
                                      unsigned int address)
  {
 +      struct labpc_private *devpriv = dev->private;
        unsigned int value;
        /*  bits to tell eeprom to expect a read */
        const int read_instruction = 0x3;
  static int labpc_eeprom_write(struct comedi_device *dev,
                                unsigned int address, unsigned int value)
  {
 +      struct labpc_private *devpriv = dev->private;
        const int write_enable_instruction = 0x6;
        const int write_instruction = 0x2;
        const int write_length = 8;     /*  8 bit write lengths to eeprom */
  
  static unsigned int labpc_eeprom_read_status(struct comedi_device *dev)
  {
 +      struct labpc_private *devpriv = dev->private;
        unsigned int value;
        const int read_status_instruction = 0x5;
        const int write_length = 8;     /*  8 bit write lengths to eeprom */
  static void write_caldac(struct comedi_device *dev, unsigned int channel,
                         unsigned int value)
  {
 +      struct labpc_private *devpriv = dev->private;
 +
        if (value == devpriv->caldac[channel])
                return;
        devpriv->caldac[channel] = value;
index 5d2ae5dc380a92a36e3382f6588e499c74afb379,b12ca68cd9e4f286191349ba148aabcf3b9d6e56..d2a203a583afe6360dbbd2ea434d16edbf8fbe96
@@@ -310,30 -310,32 +310,32 @@@ static int adis16201_read_raw(struct ii
        case IIO_CHAN_INFO_SCALE:
                switch (chan->type) {
                case IIO_VOLTAGE:
-                       *val = 0;
-                       if (chan->channel == 0)
-                               *val2 = 1220;
-                       else
-                               *val2 = 610;
+                       if (chan->channel == 0) {
+                               *val = 1;
+                               *val2 = 220000; /* 1.22 mV */
+                       } else {
+                               *val = 0;
+                               *val2 = 610000; /* 0.610 mV */
+                       }
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_TEMP:
-                       *val = 0;
-                       *val2 = -470000;
+                       *val = -470; /* 0.47 C */
+                       *val2 = 0;
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_ACCEL:
                        *val = 0;
-                       *val2 = 462500;
-                       return IIO_VAL_INT_PLUS_MICRO;
+                       *val2 = IIO_G_TO_M_S_2(462400); /* 0.4624 mg */
+                       return IIO_VAL_INT_PLUS_NANO;
                case IIO_INCLI:
                        *val = 0;
-                       *val2 = 100000;
+                       *val2 = 100000; /* 0.1 degree */
                        return IIO_VAL_INT_PLUS_MICRO;
                default:
                        return -EINVAL;
                }
                break;
        case IIO_CHAN_INFO_OFFSET:
-               *val = 25;
+               *val = 25000 / -470 - 1278; /* 25 C = 1278 */
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_CALIBBIAS:
                switch (chan->type) {
                        break;
                default:
                        return -EINVAL;
 -              };
 +              }
                mutex_lock(&indio_dev->mlock);
                addr = adis16201_addresses[chan->address][1];
                ret = adis16201_spi_read_reg_16(indio_dev, addr, &val16);
@@@ -382,7 -384,7 +384,7 @@@ static int adis16201_write_raw(struct i
                        break;
                default:
                        return -EINVAL;
 -              };
 +              }
                val16 = val & ((1 << bits) - 1);
                addr = adis16201_addresses[chan->address][1];
                return adis16201_spi_write_reg_16(indio_dev, addr, val16);
index 2064710a6b86c6c94376a314c57a4a439ec9cf19,e7b3441115aee59861571a40ebecaaf45a4160e7..7d7c4d28f6f080675455decad901ccb62f329af1
@@@ -21,6 -21,8 +21,6 @@@
  
  #include "adis16203.h"
  
 -#define DRIVER_NAME           "adis16203"
 -
  /**
   * adis16203_spi_write_reg_8() - write single byte to a register
   * @indio_dev: iio device associated with child of actual device
@@@ -314,25 -316,27 +314,27 @@@ static int adis16203_read_raw(struct ii
        case IIO_CHAN_INFO_SCALE:
                switch (chan->type) {
                case IIO_VOLTAGE:
-                       *val = 0;
-                       if (chan->channel == 0)
-                               *val2 = 1220;
-                       else
-                               *val2 = 610;
+                       if (chan->channel == 0) {
+                               *val = 1;
+                               *val2 = 220000; /* 1.22 mV */
+                       } else {
+                               *val = 0;
+                               *val2 = 610000; /* 0.61 mV */
+                       }
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_TEMP:
-                       *val = 0;
-                       *val2 = -470000;
+                       *val = -470; /* -0.47 C */
+                       *val2 = 0;
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_INCLI:
                        *val = 0;
-                       *val2 = 25000;
+                       *val2 = 25000; /* 0.025 degree */
                        return IIO_VAL_INT_PLUS_MICRO;
                default:
                        return -EINVAL;
                }
        case IIO_CHAN_INFO_OFFSET:
-               *val = 25;
+               *val = 25000 / -470 - 1278; /* 25 C = 1278 */
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_CALIBBIAS:
                bits = 14;
index d0828d97f501f8bb1729aba25f33d772ce6fe292,c6234c2f46aabdac362921e903fcdfa955f4a8a8..9b75a2bc8cbe1fa0fe80eba36ffb4a606714633c
@@@ -24,6 -24,8 +24,6 @@@
  
  #include "adis16204.h"
  
 -#define DRIVER_NAME           "adis16204"
 -
  /**
   * adis16204_spi_write_reg_8() - write single byte to a register
   * @dev: device associated with child of actual device (iio_dev or iio_trig)
@@@ -315,26 -317,28 +315,28 @@@ static int adis16204_read_raw(struct ii
        case IIO_CHAN_INFO_SCALE:
                switch (chan->type) {
                case IIO_VOLTAGE:
-                       *val = 0;
-                       if (chan->channel == 0)
-                               *val2 = 1220;
-                       else
-                               *val2 = 610;
+                       if (chan->channel == 0) {
+                               *val = 1;
+                               *val2 = 220000; /* 1.22 mV */
+                       } else {
+                               *val = 0;
+                               *val2 = 610000; /* 0.61 mV */
+                       }
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_TEMP:
-                       *val = 0;
-                       *val2 = -470000;
+                       *val = -470; /* 0.47 C */
+                       *val2 = 0;
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_ACCEL:
                        *val = 0;
                        switch (chan->channel2) {
                        case IIO_MOD_X:
                        case IIO_MOD_ROOT_SUM_SQUARED_X_Y:
-                               *val2 = 17125;
+                               *val2 = IIO_G_TO_M_S_2(17125); /* 17.125 mg */
                                break;
                        case IIO_MOD_Y:
                        case IIO_MOD_Z:
-                               *val2 = 8407;
+                               *val2 = IIO_G_TO_M_S_2(8407); /* 8.407 mg */
                                break;
                        }
                        return IIO_VAL_INT_PLUS_MICRO;
                }
                break;
        case IIO_CHAN_INFO_OFFSET:
-               *val = 25;
+               *val = 25000 / -470 - 1278; /* 25 C = 1278 */
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_CALIBBIAS:
        case IIO_CHAN_INFO_PEAK:
@@@ -387,7 -391,7 +389,7 @@@ static int adis16204_write_raw(struct i
                        break;
                default:
                        return -EINVAL;
 -              };
 +              }
                val16 = val & ((1 << bits) - 1);
                addr = adis16204_addresses[chan->address][1];
                return adis16204_spi_write_reg_16(indio_dev, addr, val16);
index 420256e2e61d87455aa8d180336008343326b866,7ee974b45d7d3a3eb354ef073a1094c9183f26c3..b7a0d5c2bbd40d764a13d56c86b0c7e78c43f88a
@@@ -22,6 -22,8 +22,6 @@@
  
  #include "adis16209.h"
  
 -#define DRIVER_NAME           "adis16209"
 -
  /**
   * adis16209_spi_write_reg_8() - write single byte to a register
   * @indio_dev: iio device associated with actual device
@@@ -293,7 -295,7 +293,7 @@@ static int adis16209_write_raw(struct i
                        break;
                default:
                        return -EINVAL;
 -              };
 +              }
                val16 = val & ((1 << bits) - 1);
                addr = adis16209_addresses[chan->address][1];
                return adis16209_spi_write_reg_16(indio_dev, addr, val16);
@@@ -341,28 -343,29 +341,29 @@@ static int adis16209_read_raw(struct ii
                case IIO_VOLTAGE:
                        *val = 0;
                        if (chan->channel == 0)
-                               *val2 = 305180;
+                               *val2 = 305180; /* 0.30518 mV */
                        else
-                               *val2 = 610500;
+                               *val2 = 610500; /* 0.6105 mV */
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_TEMP:
-                       *val = 0;
-                       *val2 = -470000;
+                       *val = -470; /* -0.47 C */
+                       *val2 = 0;
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_ACCEL:
                        *val = 0;
-                       *val2 = 2394;
-                       return IIO_VAL_INT_PLUS_MICRO;
+                       *val2 = IIO_G_TO_M_S_2(244140); /* 0.244140 mg */
+                       return IIO_VAL_INT_PLUS_NANO;
                case IIO_INCLI:
+               case IIO_ROT:
                        *val = 0;
-                       *val2 = 436;
+                       *val2 = 25000; /* 0.025 degree */
                        return IIO_VAL_INT_PLUS_MICRO;
                default:
                        return -EINVAL;
                }
                break;
        case IIO_CHAN_INFO_OFFSET:
-               *val = 25;
+               *val = 25000 / -470 - 0x4FE; /* 25 C = 0x4FE */
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_CALIBBIAS:
                switch (chan->type) {
                        break;
                default:
                        return -EINVAL;
 -              };
 +              }
                mutex_lock(&indio_dev->mlock);
                addr = adis16209_addresses[chan->address][1];
                ret = adis16209_spi_read_reg_16(indio_dev, addr, &val16);
@@@ -489,6 -492,7 +490,7 @@@ static const struct iio_chan_spec adis1
                .modified = 1,
                .channel2 = IIO_MOD_X,
                .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT,
+               IIO_CHAN_INFO_SCALE_SHARED_BIT,
                .address = rot,
                .scan_index = ADIS16209_SCAN_ROT,
                .scan_type = {
index adf70b7d0320e97bb13a6ab19817f3bd736e6eb2,eaadd9df3f78360c111b54b05ac3b93a96ba7cb7..22807ac8e8f88892fbe2a196e3b7af4f8aaabc3e
@@@ -20,6 -20,8 +20,6 @@@
  
  #include "adis16220.h"
  
 -#define DRIVER_NAME           "adis16220"
 -
  /**
   * adis16220_spi_write_reg_8() - write single byte to a register
   * @indio_dev: iio device associated with child of actual device
@@@ -484,7 -486,7 +484,7 @@@ static int adis16220_read_raw(struct ii
                break;
        case IIO_CHAN_INFO_OFFSET:
                if (chan->type == IIO_TEMP) {
-                       *val = 25;
+                       *val = 25000 / -470 - 1278; /* 25 C = 1278 */
                        return IIO_VAL_INT;
                }
                addrind = 1;
                addrind = 2;
                break;
        case IIO_CHAN_INFO_SCALE:
-               *val = 0;
                switch (chan->type) {
                case IIO_TEMP:
-                       *val2 = -470000;
+                       *val = -470; /* -0.47 C */
+                       *val2 = 0;
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_ACCEL:
-                       *val2 = 1887042;
+                       *val2 = IIO_G_TO_M_S_2(19073); /* 19.073 g */
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_VOLTAGE:
-                       if (chan->channel == 0)
-                               *val2 = 0012221;
-                       else /* Should really be dependent on VDD */
-                               *val2 = 305;
+                       if (chan->channel == 0) {
+                               *val = 1;
+                               *val2 = 220700; /* 1.2207 mV */
+                       } else {
+                               /* Should really be dependent on VDD */
+                               *val2 = 305180; /* 305.18 uV */
+                       }
                        return IIO_VAL_INT_PLUS_MICRO;
                default:
                        return -EINVAL;
index 9f486114ed51b1deb218000f1941a2f8c69cf6e8,35e093973d5cb9028992682344f3dc9bba23be96..289f81963c82d00a8a5ca223e2b71465082d8a91
@@@ -25,6 -25,8 +25,6 @@@
  
  #include "adis16240.h"
  
 -#define DRIVER_NAME           "adis16240"
 -
  static int adis16240_check_status(struct iio_dev *indio_dev);
  
  /**
@@@ -371,30 -373,31 +371,31 @@@ static int adis16240_read_raw(struct ii
        case IIO_CHAN_INFO_SCALE:
                switch (chan->type) {
                case IIO_VOLTAGE:
-                       *val = 0;
-                       if (chan->channel == 0)
-                               *val2 = 4880;
-                       else
+                       if (chan->channel == 0) {
+                               *val = 4;
+                               *val2 = 880000; /* 4.88 mV */
+                               return IIO_VAL_INT_PLUS_MICRO;
+                       } else {
                                return -EINVAL;
-                       return IIO_VAL_INT_PLUS_MICRO;
+                       }
                case IIO_TEMP:
-                       *val = 0;
-                       *val2 = 244000;
+                       *val = 244; /* 0.244 C */
+                       *val2 = 0;
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_ACCEL:
                        *val = 0;
-                       *val2 = 504062;
+                       *val2 = IIO_G_TO_M_S_2(51400); /* 51.4 mg */
                        return IIO_VAL_INT_PLUS_MICRO;
                default:
                        return -EINVAL;
                }
                break;
        case IIO_CHAN_INFO_PEAK_SCALE:
-               *val = 6;
-               *val2 = 629295;
+               *val = 0;
+               *val2 = IIO_G_TO_M_S_2(51400); /* 51.4 mg */
                return IIO_VAL_INT_PLUS_MICRO;
        case IIO_CHAN_INFO_OFFSET:
-               *val = 25;
+               *val = 25000 / 244 - 0x133; /* 25 C = 0x133 */
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_CALIBBIAS:
                bits = 10;
index 2753333a02b60f2100067786c5ea280f394c1a7b,aa964a2d829016e25b918ede1418d25152a9a425..e822460502be4b665674360f62a277e67f05febd
@@@ -24,6 -24,8 +24,6 @@@
  
  #include "adis16260.h"
  
 -#define DRIVER_NAME           "adis16260"
 -
  static int adis16260_check_status(struct iio_dev *indio_dev);
  
  /**
@@@ -496,28 -498,33 +496,33 @@@ static int adis16260_read_raw(struct ii
                switch (chan->type) {
                case IIO_ANGL_VEL:
                        *val = 0;
-                       if (spi_get_device_id(st->us)->driver_data)
-                               *val2 = 320;
-                       else
-                               *val2 = 1278;
+                       if (spi_get_device_id(st->us)->driver_data) {
+                               /* 0.01832 degree / sec */
+                               *val2 = IIO_DEGREE_TO_RAD(18320);
+                       } else {
+                               /* 0.07326 degree / sec */
+                               *val2 = IIO_DEGREE_TO_RAD(73260);
+                       }
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_VOLTAGE:
-                       *val = 0;
-                       if (chan->channel == 0)
-                               *val2 = 18315;
-                       else
-                               *val2 = 610500;
+                       if (chan->channel == 0) {
+                               *val = 1;
+                               *val2 = 831500; /* 1.8315 mV */
+                       } else {
+                               *val = 0;
+                               *val2 = 610500; /* 610.5 uV */
+                       }
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_TEMP:
-                       *val = 0;
-                       *val2 = 145300;
+                       *val = 145;
+                       *val2 = 300000; /* 0.1453 C */
                        return IIO_VAL_INT_PLUS_MICRO;
                default:
                        return -EINVAL;
                }
                break;
        case IIO_CHAN_INFO_OFFSET:
-               *val = 25;
+               *val = 250000 / 1453; /* 25 C = 0x00 */
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_CALIBBIAS:
                switch (chan->type) {
                        break;
                default:
                        return -EINVAL;
 -              };
 +              }
                mutex_lock(&indio_dev->mlock);
                addr = adis16260_addresses[chan->address][1];
                ret = adis16260_spi_read_reg_16(indio_dev, addr, &val16);
                        break;
                default:
                        return -EINVAL;
 -              };
 +              }
                mutex_lock(&indio_dev->mlock);
                addr = adis16260_addresses[chan->address][2];
                ret = adis16260_spi_read_reg_16(indio_dev, addr, &val16);
index 5eab327a09d270598e12a3ed74956750246055d3,3144a7b1e1c4f6cd03f0b55780aa473603afa51e..baec6a1f23a0bb7d17e5c16ab3d93a1cb46eaf85
@@@ -553,10 -553,13 +553,13 @@@ static int adis16400_read_raw(struct ii
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_VOLTAGE:
                        *val = 0;
-                       if (chan->channel == 0)
-                               *val2 = 2418;
-                       else
-                               *val2 = 806;
+                       if (chan->channel == 0) {
+                               *val = 2;
+                               *val2 = 418000; /* 2.418 mV */
+                       } else {
+                               *val = 0;
+                               *val2 = 805800; /* 805.8 uV */
+                       }
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_ACCEL:
                        *val = 0;
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_MAGN:
                        *val = 0;
-                       *val2 = 500;
+                       *val2 = 500; /* 0.5 mgauss */
                        return IIO_VAL_INT_PLUS_MICRO;
                case IIO_TEMP:
-                       *val = 0;
-                       *val2 = 140000;
+                       *val = st->variant->temp_scale_nano / 1000000;
+                       *val2 = (st->variant->temp_scale_nano % 1000000);
                        return IIO_VAL_INT_PLUS_MICRO;
                default:
                        return -EINVAL;
                return IIO_VAL_INT;
        case IIO_CHAN_INFO_OFFSET:
                /* currently only temperature */
-               *val = 198;
-               *val2 = 160000;
-               return IIO_VAL_INT_PLUS_MICRO;
+               *val = st->variant->temp_offset;
+               return IIO_VAL_INT;
        case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
                mutex_lock(&indio_dev->mlock);
                /* Need both the number of taps and the sampling frequency */
@@@ -622,7 -624,7 +624,7 @@@ static const struct iio_chan_spec adis1
                IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
                .address = in_supply,
                .scan_index = ADIS16400_SCAN_SUPPLY,
 -              .scan_type = IIO_ST('u', 14, 16, 0)
 +              .scan_type = IIO_ST('u', 14, 16, 0),
        }, {
                .type = IIO_ANGL_VEL,
                .modified = 1,
                IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT,
                .address = gyro_x,
                .scan_index = ADIS16400_SCAN_GYRO_X,
 -              .scan_type = IIO_ST('s', 14, 16, 0)
 +              .scan_type = IIO_ST('s', 14, 16, 0),
        }, {
                .type = IIO_ANGL_VEL,
                .modified = 1,
@@@ -752,7 -754,7 +754,7 @@@ static const struct iio_chan_spec adis1
                IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
                .address = in_supply,
                .scan_index = ADIS16400_SCAN_SUPPLY,
 -              .scan_type = IIO_ST('u', 12, 16, 0)
 +              .scan_type = IIO_ST('u', 12, 16, 0),
        }, {
                .type = IIO_ANGL_VEL,
                .modified = 1,
                IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT,
                .address = gyro_x,
                .scan_index = ADIS16400_SCAN_GYRO_X,
 -              .scan_type = IIO_ST('s', 14, 16, 0)
 +              .scan_type = IIO_ST('s', 14, 16, 0),
        }, {
                .type = IIO_ANGL_VEL,
                .modified = 1,
@@@ -877,7 -879,7 +879,7 @@@ static const struct iio_chan_spec adis1
                IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
                .address = in_supply,
                .scan_index = ADIS16400_SCAN_SUPPLY,
 -              .scan_type = IIO_ST('u', 12, 16, 0)
 +              .scan_type = IIO_ST('u', 12, 16, 0),
        }, {
                .type = IIO_ANGL_VEL,
                .modified = 1,
@@@ -1035,7 -1037,7 +1037,7 @@@ static const struct iio_chan_spec adis1
                .indexed = 1,
                .channel = 0,
                .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
-               IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT |
+               IIO_CHAN_INFO_OFFSET_SEPARATE_BIT |
                IIO_CHAN_INFO_SCALE_SHARED_BIT,
                .address = temp0,
                .scan_index = ADIS16400_SCAN_TEMP,
@@@ -1058,8 -1060,10 +1060,10 @@@ static struct adis16400_chip_info adis1
        [ADIS16300] = {
                .channels = adis16300_channels,
                .num_channels = ARRAY_SIZE(adis16300_channels),
-               .gyro_scale_micro = 873,
+               .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
                .accel_scale_micro = 5884,
+               .temp_scale_nano = 140000000, /* 0.14 C */
+               .temp_offset = 25000000 / 140000, /* 25 C = 0x00 */
                .default_scan_mask = (1 << ADIS16400_SCAN_SUPPLY) |
                (1 << ADIS16400_SCAN_GYRO_X) | (1 << ADIS16400_SCAN_ACC_X) |
                (1 << ADIS16400_SCAN_ACC_Y) | (1 << ADIS16400_SCAN_ACC_Z) |
        [ADIS16334] = {
                .channels = adis16334_channels,
                .num_channels = ARRAY_SIZE(adis16334_channels),
-               .gyro_scale_micro = 873,
-               .accel_scale_micro = 981,
+               .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
+               .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */
+               .temp_scale_nano = 67850000, /* 0.06785 C */
+               .temp_offset = 25000000 / 67850, /* 25 C = 0x00 */
                .default_scan_mask = (1 << ADIS16400_SCAN_GYRO_X) |
                (1 << ADIS16400_SCAN_GYRO_Y) | (1 << ADIS16400_SCAN_GYRO_Z) |
                (1 << ADIS16400_SCAN_ACC_X) | (1 << ADIS16400_SCAN_ACC_Y) |
        [ADIS16350] = {
                .channels = adis16350_channels,
                .num_channels = ARRAY_SIZE(adis16350_channels),
-               .gyro_scale_micro = 872664,
-               .accel_scale_micro = 24732,
+               .gyro_scale_micro = IIO_DEGREE_TO_RAD(73260), /* 0.07326 deg/s */
+               .accel_scale_micro = IIO_G_TO_M_S_2(2522), /* 0.002522 g */
+               .temp_scale_nano = 145300000, /* 0.1453 C */
+               .temp_offset = 25000000 / 145300, /* 25 C = 0x00 */
                .default_scan_mask = 0x7FF,
                .flags = ADIS16400_NO_BURST,
        },
                .num_channels = ARRAY_SIZE(adis16350_channels),
                .flags = ADIS16400_HAS_PROD_ID,
                .product_id = 0x3FE8,
-               .gyro_scale_micro = 1279,
-               .accel_scale_micro = 24732,
+               .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
+               .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */
+               .temp_scale_nano = 136000000, /* 0.136 C */
+               .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */
                .default_scan_mask = 0x7FF,
        },
        [ADIS16362] = {
                .num_channels = ARRAY_SIZE(adis16350_channels),
                .flags = ADIS16400_HAS_PROD_ID,
                .product_id = 0x3FEA,
-               .gyro_scale_micro = 1279,
-               .accel_scale_micro = 24732,
+               .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
+               .accel_scale_micro = IIO_G_TO_M_S_2(333), /* 0.333 mg */
+               .temp_scale_nano = 136000000, /* 0.136 C */
+               .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */
                .default_scan_mask = 0x7FF,
        },
        [ADIS16364] = {
                .num_channels = ARRAY_SIZE(adis16350_channels),
                .flags = ADIS16400_HAS_PROD_ID,
                .product_id = 0x3FEC,
-               .gyro_scale_micro = 1279,
-               .accel_scale_micro = 24732,
+               .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
+               .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */
+               .temp_scale_nano = 136000000, /* 0.136 C */
+               .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */
                .default_scan_mask = 0x7FF,
        },
        [ADIS16365] = {
                .num_channels = ARRAY_SIZE(adis16350_channels),
                .flags = ADIS16400_HAS_PROD_ID,
                .product_id = 0x3FED,
-               .gyro_scale_micro = 1279,
-               .accel_scale_micro = 24732,
+               .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
+               .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */
+               .temp_scale_nano = 136000000, /* 0.136 C */
+               .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */
                .default_scan_mask = 0x7FF,
        },
        [ADIS16400] = {
                .num_channels = ARRAY_SIZE(adis16400_channels),
                .flags = ADIS16400_HAS_PROD_ID,
                .product_id = 0x4015,
-               .gyro_scale_micro = 873,
-               .accel_scale_micro = 32656,
+               .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
+               .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */
                .default_scan_mask = 0xFFF,
+               .temp_scale_nano = 140000000, /* 0.14 C */
+               .temp_offset = 25000000 / 140000, /* 25 C = 0x00 */
        }
  };
  
index 0e4a6b70663d6f5d582ebc0a4c0ea9f425743db4,66e2c2f8a239964c22f3fe18dbd8d6a644b95013..8a9b1cee0f77486b1f928d0d789088865ed10c38
@@@ -246,7 -246,7 +246,7 @@@ static int omap_gem_attach_pages(struc
         * DSS, GPU, etc. are not cache coherent:
         */
        if (omap_obj->flags & (OMAP_BO_WC|OMAP_BO_UNCACHED)) {
-               addrs = kmalloc(npages * sizeof(addrs), GFP_KERNEL);
+               addrs = kmalloc(npages * sizeof(*addrs), GFP_KERNEL);
                if (!addrs) {
                        ret = -ENOMEM;
                        goto free_pages;
                                        0, PAGE_SIZE, DMA_BIDIRECTIONAL);
                }
        } else {
-               addrs = kzalloc(npages * sizeof(addrs), GFP_KERNEL);
+               addrs = kzalloc(npages * sizeof(*addrs), GFP_KERNEL);
                if (!addrs) {
                        ret = -ENOMEM;
                        goto free_pages;
@@@ -1435,7 -1435,7 +1435,7 @@@ void omap_gem_init(struct drm_device *d
        };
        int i, j;
  
 -      if (!dmm_is_initialized()) {
 +      if (!dmm_is_available()) {
                /* DMM only supported on OMAP4 and later, so this isn't fatal */
                dev_warn(dev->dev, "DMM not available, disable DMM support\n");
                return;