|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* F) \. H8 ` ?* R" p#include <linux/init.h>
/ a/ K! |" {7 Z9 i3 h# {* B#include <linux/module.h># C2 y) X0 ^( Y3 h/ ?* p
#include <linux/kernel.h>
& q5 f3 c! g, m4 [#include <linux/types.h>
: n o/ n% v7 E" B0 M0 E' z, w#include <linux/gpio.h>! W8 k0 y6 g, k! d. m$ d
#include <linux/leds.h>
" G; o2 G: \, k4 V' ]$ G#include <linux/platform_device.h>* \( J' t4 [, x) w
6 X$ B5 q/ V- D0 S
#include <asm/mach-types.h>% M; ^2 c4 v2 B' X0 q. F( l, u; J/ ?
#include <asm/mach/arch.h>0 a2 v1 N* s) ~. v3 |
#include <mach/da8xx.h>
6 V$ V- e5 n J U1 a#include <mach/mux.h>- u2 O+ K& B+ K3 h! d( Y+ o
/ t) }7 l3 y, Z+ g) R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' \9 T" o G( p, H' d( H" C#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): H- t6 p% p& u3 z N
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 J+ Z! Y3 F' P7 R
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! t- A4 F* b. c; I7 B
: ?/ \0 k9 r+ O* j+ D n/* assign the tl som board LED-GPIOs*/
( L5 L# x' \6 v; m; rstatic const short da850_evm_tl_user_led_pins[] = {
% k/ D6 a% W5 I( ] /* These pins are definition at <mach/mux.h> file */+ |. R$ Q9 ?" G9 k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; y8 c+ d2 s6 O7 r/ K -1
! {: x0 r( C3 f. ] K9 @};9 v5 r+ G+ I8 F: |5 |8 f. b" Z, q" Z
( z, T+ D; L @0 J3 k' Ustatic struct gpio_led da850_evm_tl_leds[] = {4 u( [" d7 |1 T" S" X/ ]( K9 S
{
+ i" g& [* Z7 _. g1 P9 W .active_low = 0,/ o8 [+ d' `- M/ B3 D% y. ?! E
.gpio = DA850_USER_LED0,
, X+ V% G7 q: Z6 d6 J4 {3 \! {4 w .name = "user_led0",
+ p6 g( j3 I3 d. d .default_trigger = "default-on",
+ Z! t/ E! O% `" _; o- ]0 [ },7 D; x2 A3 L$ V5 H
{/ Q0 A) `' x1 v/ N
.active_low = 0,
/ v5 A6 l6 G h+ y2 [ .gpio = DA850_USER_LED1,
& ~2 E* L$ f4 N9 f .name = "user_led1",' F( M* j% [8 }" M# `; z) G* C
.default_trigger = "default-on",' w: |2 W, T0 ]6 V9 \
},# k8 H" \6 I% J: G4 s) A2 C5 C' y
{
7 z. p/ E# [, W1 p' L* Y% y .active_low = 0,
' Q% i% \$ h5 B) B. u .gpio = DA850_USER_LED2,* O; x/ w! l1 k7 _
.name = "user_led2",
3 W) v; g' ?1 @+ }; B4 v .default_trigger = "default-on",
. b7 `2 n0 X; _ },
2 k5 o7 H% L' }: y# A4 h0 g {
- n( u) R }# h; | .active_low = 0,
( f* w0 k& A# l" k+ e5 {% b4 I .gpio = DA850_USER_LED3,' F. v% B) m% l( X/ s: |2 ~
.name = "user_led3",
$ L; M& F% j8 r* \! [6 e% D .default_trigger = "default-on",0 f, O/ S0 Q% I) |
},
' |5 T. e) i) ~) g6 I};
1 e2 t( N, a" E) x6 [8 q
- z1 M" I8 i5 z% wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( S: U: }# x; O, q .leds = da850_evm_tl_leds,# x% u O v" H% Z5 I: M, y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 ?3 i( [" y3 ~# D; x};% J9 ~% B7 S9 Y" i- U7 j3 P4 H
! k9 o) A' {7 K2 F5 W8 d
static void led_dev_release(struct device *dev)
8 j A4 u" Q6 b3 a& B1 ?9 o& ] b{
* J4 K( i# [4 Y};! m7 _; @6 O: D2 w9 E X% ?
5 l+ x7 {4 D5 Q1 k7 u! s8 K- |/ cstatic struct platform_device da850_evm_tl_leds_device = {" M1 G: }/ D) ]7 @
.name = "leds-gpio",
. V! ^0 H R% Y& @, n1 T4 T9 Y .id = 1,
1 i A; ~7 u5 `8 T+ {/ X .dev = {5 n S( u$ H( x1 I
.platform_data = &da850_evm_tl_leds_pdata,+ j% K. ~1 O1 }) k! K6 I
.release = led_dev_release,0 A' e5 q# J! x" Z/ U
}9 `7 V# _5 o/ @: P" @
};
3 @( T- J; m, h, N% x& u& l* Y9 u- F/ L4 n+ D9 [0 J
static int __init led_platform_init(void)/ ?0 U7 o3 t* ~" b6 P* @
{; }& S9 A* Y5 A" b/ t3 y
int ret;' T1 X9 \, k% P g+ C; h
#if 0
& h% h3 a4 O8 l+ h% {, x& o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 q& i* H2 U8 |% \( f: M0 e) ?- v if (ret)
" {, M. e9 J# _* @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 v m3 y! `; V9 @! p "%d\n", ret);" _& r& s6 A5 H& n J6 h
#endif. d4 q0 R/ B) j7 q
ret = platform_device_register(&da850_evm_tl_leds_device);
9 f# c2 }; H8 Y if (ret)/ U- v/ N% G) F+ m2 {! B! y- }
pr_warning("Could not register som GPIO expander LEDS");+ M; }# B+ u5 D" N
else
+ W# g; Z5 d% ` printk(KERN_INFO "LED register sucessful!\n");2 X3 u& n' t5 F' n+ }
( F% j% o2 |' Q return ret;4 }- o l' c- [/ ~
}: A4 @6 W l! Y) X* n3 Z) i1 t( x
3 O* A- t. p, i" U* B) K! ]static void __exit led_platform_exit(void)
9 f4 C5 C$ Y, N( }{. m! P0 ^2 r* _* {4 E
platform_device_unregister(&da850_evm_tl_leds_device);. {, a" ?, G8 W1 F$ W# T
4 b" a# e/ J6 A2 j6 p
printk(KERN_INFO "LED unregister!\n");6 V- g: q e0 g' \9 B# k
}. W; ]$ p& m ~! p. g
6 Q* D. Y0 j, d0 F. D+ H$ xmodule_init(led_platform_init);
6 | Q3 U6 A/ j5 s. u$ b6 M' ymodule_exit(led_platform_exit);4 J5 P! F3 Y/ M8 x6 s! a2 D. X+ f6 k. o
! `& b6 E/ O/ n bMODULE_DESCRIPTION("Led platform driver");
* z6 _3 m9 w' o/ J2 v! Z8 c8 s) IMODULE_AUTHOR("Tronlong");( }2 |9 d5 V' a: V
MODULE_LICENSE("GPL");8 M; t6 R+ ^6 m4 m
/ \6 i9 H7 n% a6 Q( t* J
|
|