xref: /openbmc/linux/drivers/mfd/ucb1x00-assabet.c (revision 0c55445f)
148c92022SRussell King /*
248c92022SRussell King  *  linux/drivers/mfd/ucb1x00-assabet.c
348c92022SRussell King  *
448c92022SRussell King  *  Copyright (C) 2001-2003 Russell King, All Rights Reserved.
548c92022SRussell King  *
648c92022SRussell King  * This program is free software; you can redistribute it and/or modify
748c92022SRussell King  * it under the terms of the GNU General Public License as published by
848c92022SRussell King  * the Free Software Foundation; either version 2 of the License.
948c92022SRussell King  *
1048c92022SRussell King  *  We handle the machine-specific bits of the UCB1x00 driver here.
1148c92022SRussell King  */
1248c92022SRussell King #include <linux/module.h>
1348c92022SRussell King #include <linux/init.h>
1448c92022SRussell King #include <linux/fs.h>
1548c92022SRussell King #include <linux/proc_fs.h>
1648c92022SRussell King #include <linux/device.h>
1748c92022SRussell King 
1848c92022SRussell King #include <asm/dma.h>
1948c92022SRussell King 
2048c92022SRussell King #include "ucb1x00.h"
2148c92022SRussell King 
2248c92022SRussell King #define UCB1X00_ATTR(name,input)\
230c55445fSTony Jones static ssize_t name##_show(struct device *dev, struct device_attribute *attr,
240c55445fSTony Jones 			   char *buf)	\
2548c92022SRussell King {								\
2648c92022SRussell King 	struct ucb1x00 *ucb = classdev_to_ucb1x00(dev);		\
2748c92022SRussell King 	int val;						\
2848c92022SRussell King 	ucb1x00_adc_enable(ucb);				\
2948c92022SRussell King 	val = ucb1x00_adc_read(ucb, input, UCB_NOSYNC);		\
3048c92022SRussell King 	ucb1x00_adc_disable(ucb);				\
3148c92022SRussell King 	return sprintf(buf, "%d\n", val);			\
3248c92022SRussell King }								\
330c55445fSTony Jones static DEVICE_ATTR(name,0444,name##_show,NULL)
3448c92022SRussell King 
3548c92022SRussell King UCB1X00_ATTR(vbatt, UCB_ADC_INP_AD1);
3648c92022SRussell King UCB1X00_ATTR(vcharger, UCB_ADC_INP_AD0);
3748c92022SRussell King UCB1X00_ATTR(batt_temp, UCB_ADC_INP_AD2);
3848c92022SRussell King 
3948c92022SRussell King static int ucb1x00_assabet_add(struct ucb1x00_dev *dev)
4048c92022SRussell King {
410c55445fSTony Jones 	device_create_file(&dev->ucb->dev, &device_attr_vbatt);
420c55445fSTony Jones 	device_create_file(&dev->ucb->dev, &device_attr_vcharger);
430c55445fSTony Jones 	device_create_file(&dev->ucb->dev, &device_attr_batt_temp);
4448c92022SRussell King 	return 0;
4548c92022SRussell King }
4648c92022SRussell King 
4748c92022SRussell King static void ucb1x00_assabet_remove(struct ucb1x00_dev *dev)
4848c92022SRussell King {
490c55445fSTony Jones 	device_remove_file(&dev->ucb->cdev, &device_attr_batt_temp);
500c55445fSTony Jones 	device_remove_file(&dev->ucb->cdev, &device_attr_vcharger);
510c55445fSTony Jones 	device_remove_file(&dev->ucb->cdev, &device_attr_vbatt);
5248c92022SRussell King }
5348c92022SRussell King 
5448c92022SRussell King static struct ucb1x00_driver ucb1x00_assabet_driver = {
5548c92022SRussell King 	.add	= ucb1x00_assabet_add,
5648c92022SRussell King 	.remove	= ucb1x00_assabet_remove,
5748c92022SRussell King };
5848c92022SRussell King 
5948c92022SRussell King static int __init ucb1x00_assabet_init(void)
6048c92022SRussell King {
6148c92022SRussell King 	return ucb1x00_register_driver(&ucb1x00_assabet_driver);
6248c92022SRussell King }
6348c92022SRussell King 
6448c92022SRussell King static void __exit ucb1x00_assabet_exit(void)
6548c92022SRussell King {
6648c92022SRussell King 	ucb1x00_unregister_driver(&ucb1x00_assabet_driver);
6748c92022SRussell King }
6848c92022SRussell King 
6948c92022SRussell King module_init(ucb1x00_assabet_init);
7048c92022SRussell King module_exit(ucb1x00_assabet_exit);
7148c92022SRussell King 
7248c92022SRussell King MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");
7348c92022SRussell King MODULE_DESCRIPTION("Assabet noddy testing only example ADC driver");
7448c92022SRussell King MODULE_LICENSE("GPL");
75