Blame view
drivers/mfd/ab8500-i2c.c
2.21 KB
39368eda9 mfd: AB8500 regis... |
1 2 3 4 5 6 7 8 9 10 11 12 |
/* * Copyright (C) ST-Ericsson SA 2010 * Author: Mattias Wallin <mattias.wallin@stericsson.com> for ST-Ericsson. * License Terms: GNU General Public License v2 * This file was based on drivers/mfd/ab8500-spi.c */ #include <linux/kernel.h> #include <linux/slab.h> #include <linux/init.h> #include <linux/module.h> #include <linux/platform_device.h> |
ee66e653c mfd: Unify abx500... |
13 |
#include <linux/mfd/abx500/ab8500.h> |
650c2a214 mach-ux500: move ... |
14 |
#include <linux/mfd/db8500-prcmu.h> |
39368eda9 mfd: AB8500 regis... |
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
static int ab8500_i2c_write(struct ab8500 *ab8500, u16 addr, u8 data) { int ret; ret = prcmu_abb_write((u8)(addr >> 8), (u8)(addr & 0xFF), &data, 1); if (ret < 0) dev_err(ab8500->dev, "prcmu i2c error %d ", ret); return ret; } static int ab8500_i2c_read(struct ab8500 *ab8500, u16 addr) { int ret; u8 data; ret = prcmu_abb_read((u8)(addr >> 8), (u8)(addr & 0xFF), &data, 1); if (ret < 0) { dev_err(ab8500->dev, "prcmu i2c error %d ", ret); return ret; } return (int)data; } static int __devinit ab8500_i2c_probe(struct platform_device *plf) { struct ab8500 *ab8500; struct resource *resource; int ret; ab8500 = kzalloc(sizeof *ab8500, GFP_KERNEL); if (!ab8500) return -ENOMEM; ab8500->dev = &plf->dev; resource = platform_get_resource(plf, IORESOURCE_IRQ, 0); if (!resource) { kfree(ab8500); return -ENODEV; } ab8500->irq = resource->start; ab8500->read = ab8500_i2c_read; ab8500->write = ab8500_i2c_write; platform_set_drvdata(plf, ab8500); ret = ab8500_init(ab8500); if (ret) kfree(ab8500); return ret; } static int __devexit ab8500_i2c_remove(struct platform_device *plf) { struct ab8500 *ab8500 = platform_get_drvdata(plf); ab8500_exit(ab8500); kfree(ab8500); return 0; } static struct platform_driver ab8500_i2c_driver = { .driver = { .name = "ab8500-i2c", .owner = THIS_MODULE, }, .probe = ab8500_i2c_probe, .remove = __devexit_p(ab8500_i2c_remove) }; static int __init ab8500_i2c_init(void) { return platform_driver_register(&ab8500_i2c_driver); } static void __exit ab8500_i2c_exit(void) { platform_driver_unregister(&ab8500_i2c_driver); } |
0cb3fcd72 gpio: driver for ... |
101 |
arch_initcall(ab8500_i2c_init); |
39368eda9 mfd: AB8500 regis... |
102 103 104 105 106 |
module_exit(ab8500_i2c_exit); MODULE_AUTHOR("Mattias WALLIN <mattias.wallin@stericsson.com"); MODULE_DESCRIPTION("AB8500 Core access via PRCMU I2C"); MODULE_LICENSE("GPL v2"); |