Update DEP-5 uri
[debian/omnibook.git] / lib.c
1 /*
2  * lib.c -- Generic helpers functions
3  * 
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License as published by the
6  * Free Software Foundation; either version 2, or (at your option) any
7  * later version.
8  * 
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * General Public License for more details.
13  *
14  * Written by Soós Péter <sp@osb.hu>, 2002-2004
15  * Modified by Mathieu Bérard <mathieu.berard@crans.org>, 2006
16  */
17
18 #include "omnibook.h"
19
20 #include "hardware.h"
21 #include "compat.h"
22 #include <linux/input.h>
23
24 /*
25  * Generic funtion for applying a mask on a value
26  * Hack: degenerate to omnibook_toggle if there is no read method 
27  * of if the read address is 0, this is used in blank.c 
28  */
29 int __omnibook_apply_write_mask(const struct omnibook_operation *io_op, int toggle)
30 {
31         int retval = 0;
32         int mask;
33         u8 data;
34
35         if(!(io_op->backend->byte_read  && io_op->read_addr))
36                 return __omnibook_toggle(io_op,toggle);
37
38         if ((retval = __backend_byte_read(io_op, &data)))
39                 return retval;
40
41         if (toggle == 1)
42                 mask = io_op->on_mask;
43         else if (toggle == 0)
44                 mask = io_op->off_mask;
45         else
46                 return -EINVAL;
47
48         if (mask > 0)
49                 data |= (u8) mask;
50         else if (mask < 0)
51                 data &= ~((u8) (-mask));
52         else
53                 return -EINVAL;
54
55         retval = __backend_byte_write(io_op, data);
56
57         return retval;
58 }
59
60 /*
61  * Helper for toggle like operations
62  */
63 int __omnibook_toggle(const struct omnibook_operation *io_op, int toggle)
64 {
65         int retval;
66         u8 data;
67
68         data = toggle ? io_op->on_mask : io_op->off_mask;
69         retval = __backend_byte_write(io_op, data);
70         return retval;
71 }
72
73 void omnibook_report_key( struct input_dev *dev, unsigned int keycode)
74 {
75         input_report_key(dev, keycode, 1);
76         input_sync(dev);
77         input_report_key(dev, keycode, 0);
78         input_sync(dev);
79 }
80
81 /* End of file */