|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 ?8 y1 X; h* \* A6 D+ v" X7 _
#include <linux/init.h>2 S* ]" F- Q2 q* f% r1 x% d4 n- x
#include <linux/module.h>
0 Y& P. Q, [# ], v" N i#include <linux/kernel.h>
1 i: n+ H7 K N* J( i% l#include <linux/types.h>
/ \0 y7 q& H, m+ i#include <linux/gpio.h>; }! q/ ^* `# Y* G0 s' ]
#include <linux/leds.h>
( Q1 v \2 A& n2 x: z' |) z#include <linux/platform_device.h>
+ B- q1 Q% W2 p) I+ n
. N2 m) J# G! }( v#include <asm/mach-types.h>
3 }2 B3 x3 g4 @/ C) @& L# c K; h#include <asm/mach/arch.h>
+ ?* I5 H: h3 A7 ]#include <mach/da8xx.h>8 v/ o, U7 A3 v4 `
#include <mach/mux.h>
' {+ ]) j' \1 T- ^0 ^9 r* m
1 Z2 B# w- O* p: N#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 x8 V) y. C- q ]5 K% [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( J2 z/ n' D. V7 U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 r1 y7 a# M7 C
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* X4 \) g- b+ A( H& R
, E# p% m0 G! {, ?) R$ v- J
/* assign the tl som board LED-GPIOs*/
* O3 d) P3 }3 z$ S! ?, l# Wstatic const short da850_evm_tl_user_led_pins[] = {
5 w- S- j3 t2 w9 f- C; v3 h k /* These pins are definition at <mach/mux.h> file */
; `( Q" E! t: N8 X( S4 o7 H9 e DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! X) G4 c) X; S y2 ]3 m* r; z
-1; @" c9 n% @% w6 A' G4 W
};" m: F; J w4 b& o# G0 I8 e
- h4 A. ]' w' o1 ?
static struct gpio_led da850_evm_tl_leds[] = {
+ D5 }) Z+ C6 w6 a {
9 Z; a' E6 H- h .active_low = 0,2 o* x7 r9 q; f2 _" _; K
.gpio = DA850_USER_LED0, F5 j& Y9 y0 k/ C
.name = "user_led0",1 y4 _5 @6 o" ]! l. z, j
.default_trigger = "default-on",3 t/ J- v7 g6 I9 s
},4 J; Z- k' _, q
{
5 x" K1 F$ g9 j, Z! z1 C .active_low = 0,
; U5 r& `6 p7 r7 d9 ^& o) v, D$ x .gpio = DA850_USER_LED1,
. L4 w1 |8 G K .name = "user_led1",6 f% W" _4 A" F
.default_trigger = "default-on",3 c. \% L3 j- U( D7 u8 m, p4 }
},
L: [0 N( q& H% \5 ?" @7 k {' n/ q1 ^) e% W! B
.active_low = 0,4 ~' j I5 g$ K0 D
.gpio = DA850_USER_LED2," B. I4 j+ ~6 b0 ^) A& o
.name = "user_led2",
3 b! n) l' ~3 ^3 o: _ .default_trigger = "default-on",
2 P1 b+ o$ n" `# \$ u },: f0 ?1 m o$ l/ p1 n
{
) A% _6 b7 ]1 \7 C .active_low = 0,( X( v; L4 ]5 ]+ e* B9 U( J
.gpio = DA850_USER_LED3,, C& Z6 u- x3 k: d( x l$ _. |7 h
.name = "user_led3",( x8 ~+ u4 ]5 \1 q% t
.default_trigger = "default-on",$ v& a1 Q) ?1 K. z
},
$ \5 r6 P# J3 }# _) X# b};
: a8 V9 e# |* J4 X9 q" ]+ N9 m v' h$ ^* [4 s& g" q* }, a
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ `; U( s& Z5 L& R8 A .leds = da850_evm_tl_leds,0 I/ `- [" Z# P' h" ^# v; A% R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),) P" s$ V- e; Y7 {5 u3 @
};8 U$ v/ q! `4 Y4 k+ r2 u. d
( j" D) C) K7 t8 N3 D
static void led_dev_release(struct device *dev)- c! w1 V# j6 ~
{
3 Q& l# S) _4 N+ r$ V( D4 j! c};
) s' R- u- D, o) F5 R) E% A$ X0 M% m2 b: W U1 K! y, w T
static struct platform_device da850_evm_tl_leds_device = {3 j) [6 ~+ r. m x. T6 ~
.name = "leds-gpio",
5 d1 `7 m- W, y0 l4 N) k .id = 1,
, T8 g' d2 s4 A .dev = {
7 y3 @8 R+ m, ~( E3 o .platform_data = &da850_evm_tl_leds_pdata,
6 O( A5 L) M8 J# y3 R5 w8 O .release = led_dev_release,& W/ H* D5 x3 V/ W5 G3 Z& N" c- r
}
A$ U% E! a% Q};
) h& @- b: D9 P3 h" C2 r! |" P3 V! R/ P7 Z& {) {8 a+ @8 K; n
static int __init led_platform_init(void)
# m; i7 F3 W5 \; }: ~* }( ^5 \{# g- ~: c6 n# ~2 E& Y9 U2 m
int ret;* t" F' _% c7 g/ @" m, Q
#if 0
! K# y: Z8 F1 j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! }, v1 P- `) K3 M/ V
if (ret) S% ~( |; M% a9 [- D6 p6 A
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 _, a5 }- V; V) w" Y* h1 Y4 u0 C! i3 g "%d\n", ret);& ~# B5 n* z7 `7 f$ o% ?
#endif
9 l0 z& Q1 ]/ _+ q ret = platform_device_register(&da850_evm_tl_leds_device);$ s, f/ `/ w4 `2 W
if (ret)
+ c" i9 C3 Q2 O; o9 e+ U. P pr_warning("Could not register som GPIO expander LEDS");
2 z2 z8 W0 B! F! x else
( b. }/ d: g2 R M b printk(KERN_INFO "LED register sucessful!\n");- |& _$ g( k- g7 t+ b( N3 Y
$ F. O! W" M% ~6 F return ret;
+ D* @, i9 V" `/ S3 S7 k8 ^1 |}& Z. `& {& _* D3 D) r4 i
+ B% Z' R5 V7 Z% d. {$ Z z$ J
static void __exit led_platform_exit(void)
: j* T _) W G' \& d% r# B M{4 O- q9 B* r t) b7 q- X9 G
platform_device_unregister(&da850_evm_tl_leds_device);: v1 E" \) c: Q2 k/ {9 i
, {8 m& z! z2 I @0 B, E' F9 J printk(KERN_INFO "LED unregister!\n");
5 m0 x2 I1 j9 }" r( @$ ^}5 W5 ?/ M; T0 f, U
+ X& T7 a8 V* f2 q8 i
module_init(led_platform_init); o+ W3 S @3 n2 J
module_exit(led_platform_exit);
+ A) C# ~ V$ }4 k/ r2 k. b% {
+ e/ `; Y+ E' I4 M6 ?% CMODULE_DESCRIPTION("Led platform driver");
8 P+ i: \! K1 W$ H. XMODULE_AUTHOR("Tronlong");
$ _9 S: {1 w0 `2 w" D1 zMODULE_LICENSE("GPL");
, W* y. V) U4 d/ ^ l0 G4 K- V
9 r8 P$ C8 V! d" ^ |
|