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/sysdev.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 sys_device
*dev
,
41 struct sysdev_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 sys_device
*dev
,
50 struct sysdev_attribute
*attr
,
51 const char *buf
, size_t size
)
53 unsigned int ch
= dev
->id
;
54 tx_7segled_putc(ch
, buf
[0]);
58 static SYSDEV_ATTR(ascii
, 0200, NULL
, ascii_store
);
59 static SYSDEV_ATTR(raw
, 0200, NULL
, raw_store
);
61 static ssize_t
map_seg7_show(struct sysdev_class
*class, char *buf
)
63 memcpy(buf
, &txx9_seg7map
, sizeof(txx9_seg7map
));
64 return sizeof(txx9_seg7map
);
67 static ssize_t
map_seg7_store(struct sysdev_class
*class,
68 const char *buf
, size_t size
)
70 if (size
!= sizeof(txx9_seg7map
))
72 memcpy(&txx9_seg7map
, buf
, size
);
76 static SYSDEV_CLASS_ATTR(map_seg7
, 0600, map_seg7_show
, map_seg7_store
);
78 static struct sysdev_class tx_7segled_sysdev_class
= {
82 static int __init
tx_7segled_init_sysfs(void)
87 error
= sysdev_class_register(&tx_7segled_sysdev_class
);
90 error
= sysdev_class_create_file(&tx_7segled_sysdev_class
,
94 for (i
= 0; i
< tx_7segled_num
; i
++) {
95 struct sys_device
*dev
;
96 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
102 dev
->cls
= &tx_7segled_sysdev_class
;
103 error
= sysdev_register(dev
);
105 sysdev_create_file(dev
, &attr_ascii
);
106 sysdev_create_file(dev
, &attr_raw
);
112 device_initcall(tx_7segled_init_sysfs
);