Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ab8500-sysctrl.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) ST-Ericsson SA 2010
3  * Author: Mattias Nilsson <[email protected]> for ST Ericsson.
4  * License terms: GNU General Public License (GPL) version 2
5  */
6 
7 #include <linux/err.h>
8 #include <linux/module.h>
10 #include <linux/mfd/abx500.h>
13 
14 static struct device *sysctrl_dev;
15 
16 static inline bool valid_bank(u8 bank)
17 {
18  return ((bank == AB8500_SYS_CTRL1_BLOCK) ||
19  (bank == AB8500_SYS_CTRL2_BLOCK));
20 }
21 
23 {
24  u8 bank;
25 
26  if (sysctrl_dev == NULL)
27  return -EAGAIN;
28 
29  bank = (reg >> 8);
30  if (!valid_bank(bank))
31  return -EINVAL;
32 
33  return abx500_get_register_interruptible(sysctrl_dev, bank,
34  (u8)(reg & 0xFF), value);
35 }
36 
38 {
39  u8 bank;
40 
41  if (sysctrl_dev == NULL)
42  return -EAGAIN;
43 
44  bank = (reg >> 8);
45  if (!valid_bank(bank))
46  return -EINVAL;
47 
48  return abx500_mask_and_set_register_interruptible(sysctrl_dev, bank,
49  (u8)(reg & 0xFF), mask, value);
50 }
51 
52 static int __devinit ab8500_sysctrl_probe(struct platform_device *pdev)
53 {
54  sysctrl_dev = &pdev->dev;
55  return 0;
56 }
57 
58 static int __devexit ab8500_sysctrl_remove(struct platform_device *pdev)
59 {
60  sysctrl_dev = NULL;
61  return 0;
62 }
63 
64 static struct platform_driver ab8500_sysctrl_driver = {
65  .driver = {
66  .name = "ab8500-sysctrl",
67  .owner = THIS_MODULE,
68  },
69  .probe = ab8500_sysctrl_probe,
70  .remove = __devexit_p(ab8500_sysctrl_remove),
71 };
72 
73 static int __init ab8500_sysctrl_init(void)
74 {
75  return platform_driver_register(&ab8500_sysctrl_driver);
76 }
77 subsys_initcall(ab8500_sysctrl_init);
78 
79 MODULE_AUTHOR("Mattias Nilsson <[email protected]");
80 MODULE_DESCRIPTION("AB8500 system control driver");
81 MODULE_LICENSE("GPL v2");