|
求大神给下面的程序做注解,请稍详细些,谢谢。
( T) x" T! t" R% V$ y9 I#include <linux/init.h>
) ^( Q V, D8 ?& E$ m+ q#include <linux/module.h> ]; z, p3 Z* y" C: ~1 R
#include <linux/kernel.h>( R& w7 I* v' h
#include <linux/types.h>
' }; U6 m$ R% `' \; i% ~#include <linux/gpio.h>
1 h8 }) n0 H W; Y#include <linux/leds.h>
. c0 i( p9 v4 ^0 Q1 S" u#include <linux/platform_device.h>
$ I5 O; M* R* S6 e* r/ I
8 ~ f. v3 F) |* B3 Q7 J#include <asm/mach-types.h>
1 Q Y- v7 I" ?7 ?, j# K2 ~#include <asm/mach/arch.h>
, J9 ?, ^. D" t3 O+ [#include <mach/da8xx.h>
; n+ \: e, x7 @#include <mach/mux.h>
6 U, s3 y- u5 o9 m& U+ D
, y3 q. D, C2 y. d" r. S" N. U" A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. V9 I8 O( Y* ]+ N' G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 L) z# p( i2 G0 Q: o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ c/ r& ^8 K# d! A9 T#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 z1 ~) c) `0 E
4 B2 W: y- T8 b& r# g/* assign the tl som board LED-GPIOs*/# K8 B! v3 j5 g& s
static const short da850_evm_tl_user_led_pins[] = {
" s7 l& v! f! ~! u S2 e /* These pins are definition at <mach/mux.h> file */
3 b0 d4 v( y( a: T6 Q' ^6 E DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 w3 z+ h( X9 g U
-1
0 ^; G4 E/ c! g};: D5 B+ z" m8 j- u4 k) J
1 F# x; D9 h* {0 n8 N* J
static struct gpio_led da850_evm_tl_leds[] = {
9 S3 k8 ~: j W' c2 H {2 l: X( N0 V8 H: c; p8 I0 r$ ^
.active_low = 0,1 m, B3 X: T8 L+ Y& ?5 c
.gpio = DA850_USER_LED0,
) |5 s0 l F0 G: h% I) ?/ @ .name = "user_led0",
' M7 y5 t2 p4 j7 Z1 O .default_trigger = "default-on",& H( S+ o3 M. W. \2 i& E
},) Z+ {5 o: N' E' J5 W
{/ [- ?: ?1 f/ F. i: Y8 A, j; ^% \
.active_low = 0,
- u& b4 ]& V8 x! P .gpio = DA850_USER_LED1,7 l, \' w3 M7 z1 ]4 k
.name = "user_led1",$ c2 H) p8 b8 C4 |3 b$ B
.default_trigger = "default-on",
. A/ m% u) o8 Y; }6 y; B/ \ }, | [8 b* K( S
{
! g& j |2 k( M" x4 N" ~ .active_low = 0,' e X* H5 s7 D) P' p( x
.gpio = DA850_USER_LED2,
# o$ I1 b( u' y |5 g. c$ Z .name = "user_led2",
7 R3 a0 f. e( r* `- H) } .default_trigger = "default-on",
8 l7 K, t" R0 F! T; U6 ` },6 m$ G1 ~( i* y0 g
{
/ y% ~" x6 g2 O! L4 I" C .active_low = 0,5 {; I+ W' j4 c3 u$ t
.gpio = DA850_USER_LED3,) g$ c. X9 x' Y1 z2 u
.name = "user_led3",
$ b* t+ D" x0 v1 j+ w7 | .default_trigger = "default-on",
( _$ k. u8 H; }/ F! h" L },
; y& O, `, x6 b Z V};
. t: x7 H6 s; h0 H2 i
" G* { J# g1 D8 ^" ]static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 H9 I6 o: X! @+ `1 C$ i .leds = da850_evm_tl_leds,
4 u7 k* l' W Y6 a+ t* {: g. s$ T .num_leds = ARRAY_SIZE(da850_evm_tl_leds),& {$ n0 ~/ M1 W" \
};
$ w, J* k, j, [1 C( v7 T$ V& x0 J: N0 x) M' a, I5 F/ e
static void led_dev_release(struct device *dev)
4 ]! [8 X9 o! ~. ?6 I6 N# X{
% E0 } y4 n1 k" y# _};- K* F( r4 g o
* N8 Q' e! b d) I, Z" Bstatic struct platform_device da850_evm_tl_leds_device = {
/ V4 A. P# q+ _ .name = "leds-gpio",
) P7 q6 k# C4 n5 o .id = 1,! ?( c6 S& s/ x, R% C
.dev = {
% j6 W# m% l8 \ .platform_data = &da850_evm_tl_leds_pdata,
+ P% [0 n, `6 j$ \+ G* x .release = led_dev_release,
: S4 X8 s" C! t; u }
6 @, d$ j9 ]& j. i6 Y* l- U};: X) ^: n- x: z" o& w9 T
5 f- }* l8 C/ Q' w @static int __init led_platform_init(void)
D9 o1 p$ A5 F4 G* A* F9 m{
" T' l$ W+ p& f8 R* [: r int ret;* r' d6 e n- {+ M! M$ n1 l
#if 0
$ p& u5 f7 c* L. ~ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 t9 x( x& [) Q$ o
if (ret)" k" ?" D' N' [- j# ^8 q z/ D' g9 Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ a( U" J# K+ v# \0 b% y
"%d\n", ret);
8 q5 k+ O7 K8 [9 Z% [#endif# M& M3 ?$ n4 z& e o
ret = platform_device_register(&da850_evm_tl_leds_device);5 F# O, P8 N& Y* A2 C
if (ret)+ B7 A& W$ i) }) n* N: I5 C
pr_warning("Could not register som GPIO expander LEDS");
) L: `. T- q. ~! p4 Q else( }& R% K* ]- [! c2 j$ N! i
printk(KERN_INFO "LED register sucessful!\n");
, q% ~& Z7 ~3 V7 Z6 P( {
, \- x9 m: }. G. ` return ret;2 R! ]6 e5 ?# W6 w' V
}7 H1 X( ~0 j/ C5 X/ V/ d. {
( ^3 w0 e6 `9 x
static void __exit led_platform_exit(void)
# s) [3 c3 ]# I7 @ V3 N- ]{ [: u$ F. }1 o6 n* ~
platform_device_unregister(&da850_evm_tl_leds_device);
8 `! P# ~9 _9 u' `% u: a9 F
. C n5 ]4 Y% r& ]. M6 D printk(KERN_INFO "LED unregister!\n");$ B& \; ?- U+ D
}
+ L! J) |, j ?4 `8 j, n9 Q+ X& y1 e6 q4 K# S1 a4 G# @% {
module_init(led_platform_init);
: E* d. c- j: m7 lmodule_exit(led_platform_exit);
8 Y7 ?3 T% L/ I9 J/ }/ A, K, y( F5 b
/ `+ { q- N4 TMODULE_DESCRIPTION("Led platform driver");/ C; }8 e% c# B
MODULE_AUTHOR("Tronlong");% r' z1 f; n0 l
MODULE_LICENSE("GPL");( J3 j' O$ K/ @
: k6 u+ V0 v6 o* ~: c; T0 ] |
|