2 * 7 Segment LED routines
3 * Based on RBTX49xx patch from CELF patch archive.
5 * This file is subject to the terms and conditions of the GNU General Public
6 * License. See the file "COPYING" in the main directory of this archive
9 * (C) Copyright TOSHIBA CORPORATION 2005-2007
10 * All Rights Reserved.
12 #include <linux/device.h>
13 #include <linux/slab.h>
14 #include <linux/map_to_7segment.h>
15 #include <asm/txx9/generic.h>
17 static unsigned int tx_7segled_num
;
18 static void (*tx_7segled_putc
)(unsigned int pos
, unsigned char val
);
20 void __init
txx9_7segled_init(unsigned int num
,
21 void (*putc
)(unsigned int pos
, unsigned char val
))
24 tx_7segled_putc
= putc
;
27 static SEG7_CONVERSION_MAP(txx9_seg7map
, MAP_ASCII7SEG_ALPHANUM_LC
);
29 int txx9_7segled_putc(unsigned int pos
, char c
)
31 if (pos
>= tx_7segled_num
)
33 c
= map_to_seg7(&txx9_seg7map
, c
);
36 tx_7segled_putc(pos
, c
);
40 static ssize_t
ascii_store(struct device
*dev
,
41 struct device_attribute
*attr
,
42 const char *buf
, size_t size
)
44 unsigned int ch
= dev
->id
;
45 txx9_7segled_putc(ch
, buf
[0]);
49 static ssize_t
raw_store(struct device
*dev
,
50 struct device_attribute
*attr
,
51 const char *buf
, size_t size
)
53 unsigned int ch
= dev
->id
;
54 tx_7segled_putc(ch
, buf
[0]);
58 static DEVICE_ATTR(ascii
, 0200, NULL
, ascii_store
);
59 static DEVICE_ATTR(raw
, 0200, NULL
, raw_store
);
61 static ssize_t
map_seg7_show(struct device
*dev
,
62 struct device_attribute
*attr
,
65 memcpy(buf
, &txx9_seg7map
, sizeof(txx9_seg7map
));
66 return sizeof(txx9_seg7map
);
69 static ssize_t
map_seg7_store(struct device
*dev
,
70 struct device_attribute
*attr
,
71 const char *buf
, size_t size
)
73 if (size
!= sizeof(txx9_seg7map
))
75 memcpy(&txx9_seg7map
, buf
, size
);
79 static DEVICE_ATTR(map_seg7
, 0600, map_seg7_show
, map_seg7_store
);
81 static struct bus_type tx_7segled_subsys
= {
83 .dev_name
= "7segled",
86 static void tx_7segled_release(struct device
*dev
)
91 static int __init
tx_7segled_init_sysfs(void)
96 error
= subsys_system_register(&tx_7segled_subsys
, NULL
);
99 error
= device_create_file(tx_7segled_subsys
.dev_root
, &dev_attr_map_seg7
);
102 for (i
= 0; i
< tx_7segled_num
; i
++) {
104 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
110 dev
->bus
= &tx_7segled_subsys
;
111 dev
->release
= &tx_7segled_release
;
112 error
= device_register(dev
);
117 device_create_file(dev
, &dev_attr_ascii
);
118 device_create_file(dev
, &dev_attr_raw
);
123 device_initcall(tx_7segled_init_sysfs
);