linux/drivers/mfd/ucb1x00-assabet.c
<<
>>
Prefs
   1/*
   2 *  linux/drivers/mfd/ucb1x00-assabet.c
   3 *
   4 *  Copyright (C) 2001-2003 Russell King, All Rights Reserved.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License.
   9 *
  10 *  We handle the machine-specific bits of the UCB1x00 driver here.
  11 */
  12#include <linux/module.h>
  13#include <linux/init.h>
  14#include <linux/fs.h>
  15#include <linux/proc_fs.h>
  16#include <linux/device.h>
  17#include <linux/mfd/ucb1x00.h>
  18
  19#include <mach/dma.h>
  20
  21
  22#define UCB1X00_ATTR(name,input)\
  23static ssize_t name##_show(struct device *dev, struct device_attribute *attr, \
  24                           char *buf)   \
  25{                                                               \
  26        struct ucb1x00 *ucb = classdev_to_ucb1x00(dev);         \
  27        int val;                                                \
  28        ucb1x00_adc_enable(ucb);                                \
  29        val = ucb1x00_adc_read(ucb, input, UCB_NOSYNC);         \
  30        ucb1x00_adc_disable(ucb);                               \
  31        return sprintf(buf, "%d\n", val);                       \
  32}                                                               \
  33static DEVICE_ATTR(name,0444,name##_show,NULL)
  34
  35UCB1X00_ATTR(vbatt, UCB_ADC_INP_AD1);
  36UCB1X00_ATTR(vcharger, UCB_ADC_INP_AD0);
  37UCB1X00_ATTR(batt_temp, UCB_ADC_INP_AD2);
  38
  39static int ucb1x00_assabet_add(struct ucb1x00_dev *dev)
  40{
  41        device_create_file(&dev->ucb->dev, &dev_attr_vbatt);
  42        device_create_file(&dev->ucb->dev, &dev_attr_vcharger);
  43        device_create_file(&dev->ucb->dev, &dev_attr_batt_temp);
  44        return 0;
  45}
  46
  47static void ucb1x00_assabet_remove(struct ucb1x00_dev *dev)
  48{
  49        device_remove_file(&dev->ucb->dev, &dev_attr_batt_temp);
  50        device_remove_file(&dev->ucb->dev, &dev_attr_vcharger);
  51        device_remove_file(&dev->ucb->dev, &dev_attr_vbatt);
  52}
  53
  54static struct ucb1x00_driver ucb1x00_assabet_driver = {
  55        .add    = ucb1x00_assabet_add,
  56        .remove = ucb1x00_assabet_remove,
  57};
  58
  59static int __init ucb1x00_assabet_init(void)
  60{
  61        return ucb1x00_register_driver(&ucb1x00_assabet_driver);
  62}
  63
  64static void __exit ucb1x00_assabet_exit(void)
  65{
  66        ucb1x00_unregister_driver(&ucb1x00_assabet_driver);
  67}
  68
  69module_init(ucb1x00_assabet_init);
  70module_exit(ucb1x00_assabet_exit);
  71
  72MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");
  73MODULE_DESCRIPTION("Assabet noddy testing only example ADC driver");
  74MODULE_LICENSE("GPL");
  75