|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: L/ p5 T" m7 ]; g" g#include <linux/init.h>
$ W9 e+ _) k$ V& p* z0 V3 L#include <linux/module.h>
+ {6 p+ F" v1 g$ ^# c8 a#include <linux/kernel.h>
) b; c) B3 n, E" q7 {5 [& F! o#include <linux/types.h>
/ ~6 g3 H2 t" B#include <linux/gpio.h>$ q& o# O' O w- u5 Y
#include <linux/leds.h>
. I; t( X" @4 {8 |0 h#include <linux/platform_device.h>. b( O5 w. w% P% u+ a# |: v5 ]
! b0 _( r, E- [9 Q#include <asm/mach-types.h>( D$ t J0 ]5 t: v, z& J" M6 l
#include <asm/mach/arch.h>+ i9 ]& ?' W9 j! Q% o
#include <mach/da8xx.h>
) W/ h& ~7 y% X/ w#include <mach/mux.h>
5 ~4 t- ?3 o# I& P# Q+ v( D# A! |6 m& y" w
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ n) ?* y) _8 _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" F" S8 J3 \" X
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 U2 f9 |9 F5 W. i$ O8 P" L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 \3 } m) E. o+ ^3 D2 J; R. b$ s2 W
" \: |) g6 J8 }/* assign the tl som board LED-GPIOs*/
# t1 B; @( P3 M7 c' \4 `% [7 Ystatic const short da850_evm_tl_user_led_pins[] = {
1 t% I) Q9 N v* @% s5 l9 B /* These pins are definition at <mach/mux.h> file */* S$ _( u9 U+ Y7 {) H& s$ u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 s1 A3 k; P( c- g1 P -1
" ~8 `% q8 a6 D; ~8 y! m};
! n9 G. c4 p' ^3 T. D3 [
, y. W W) e( V& [7 n% M. w8 {static struct gpio_led da850_evm_tl_leds[] = {' X% {* S' @* q4 f. V: L7 v3 V2 L
{4 d8 f* U! S# E3 k1 i: D5 s8 G
.active_low = 0,
/ y9 X; f3 N& t( ] .gpio = DA850_USER_LED0," O; u) U I: O
.name = "user_led0",
6 M, k7 q( m* W6 _/ y .default_trigger = "default-on",- V$ j+ `* a9 @8 Z: p
},
: G6 t, P3 m( t9 b {
( o* s2 }% Y. V6 J! M: G1 N .active_low = 0,: t, k3 M/ ^* C! i( h
.gpio = DA850_USER_LED1,
% R( T& a5 B0 b3 T% Y( L; A6 _ .name = "user_led1",
3 M, x. @5 z M .default_trigger = "default-on"," f$ O0 S! z0 P1 P$ {. R# h" Q
},
: ^2 g3 k7 m4 _, r) q; G {2 u; E! t4 \5 M% v- M+ K' f- ~
.active_low = 0,+ X J- A D6 e$ n5 u% O. E4 M
.gpio = DA850_USER_LED2,
" I* x. D( J2 G% [2 v .name = "user_led2",
; X5 ` I& X, A/ z+ F .default_trigger = "default-on",
2 T0 @: ]; x/ k$ p& B7 U" N },) w) R m: x- b, U& K
{
7 U8 l' C3 g8 p# Y9 ~, W .active_low = 0,, p e: }1 w0 j) i3 v# }- Q
.gpio = DA850_USER_LED3,' j4 \) I5 q% B
.name = "user_led3",
/ |4 G6 j0 l# u0 ~ .default_trigger = "default-on",
/ m. U4 {1 S* J: h0 v },
+ x1 }9 w6 \ I( P: `$ D};" h6 `; ^1 `' Y! M3 f4 F# o
3 z2 G7 P+ v2 D! ]- U }' a: ?static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ K% c% r9 y3 K# x) n
.leds = da850_evm_tl_leds,; M7 G R% x$ O7 e2 w
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),! {+ |% `" ^( `& c
};
) d+ F: `( E* D
) u l b3 B ostatic void led_dev_release(struct device *dev)
9 L1 c; J* B, H7 K g3 D8 c{
9 x, o3 i h3 A% `+ M};
# j7 w* q4 g$ d5 I: e5 o, }" o2 g( |% ~; c; m; C b' B# E
static struct platform_device da850_evm_tl_leds_device = {
" }+ q; ~1 _# } .name = "leds-gpio",
" ?. Y5 r, A# g .id = 1,1 N$ p1 R5 K+ l+ s) Q
.dev = {3 s* T8 \. k0 U9 _& z4 v
.platform_data = &da850_evm_tl_leds_pdata,
& k7 y1 }9 T7 w/ v# r) S, F .release = led_dev_release,1 l* O: \3 l/ m: `% v& x$ i! _
}
7 r& }+ A3 u1 `};0 G/ e% o P/ u' N, G
- o2 B O& {1 I2 s2 A: E9 l
static int __init led_platform_init(void)
u& x: |8 R. t; I! M{ E/ V$ L1 F% b9 J
int ret;( W b* r2 V" P/ E1 o9 r
#if 03 @; m# C1 t& J2 u( @5 S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. B) H+ @0 B% ?! H if (ret)
. e' U) p& e8 ?5 p* z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' R; `& b$ J7 w: ?
"%d\n", ret);- ^3 |6 {: [' E( w: s; ?% ~
#endif8 B$ T4 K+ m8 T, a
ret = platform_device_register(&da850_evm_tl_leds_device);1 G) g4 r+ X) M, C( P4 A- h7 F7 d
if (ret)( l" v5 X# M) H) e1 t
pr_warning("Could not register som GPIO expander LEDS");
! i" p7 C$ ^: H% g' M else1 t1 S2 |2 {& H! L- X* U
printk(KERN_INFO "LED register sucessful!\n");" q K! P& e; o$ A4 K, Z
5 |, X6 K: w: t return ret;
5 D) a/ Q3 B, _) |}
+ p: x0 l2 E! w4 `! r& L& P" {, U- T5 N8 T4 j9 ?- Z) G
static void __exit led_platform_exit(void)
L( I1 _, H# u! x) D* `+ m. G& Q# [8 R{
8 j; y/ [! f, j* D8 K, ]3 s platform_device_unregister(&da850_evm_tl_leds_device);' U- w4 |& \! m- l$ n9 `
, b" c9 ?2 O& ]) V# ?) [! U ~
printk(KERN_INFO "LED unregister!\n");
, U$ Y! [# ]( j+ F3 a1 B+ P} C6 ~5 |. Z1 }. {' C
3 A0 ?! b; c* y; vmodule_init(led_platform_init);
4 {/ i5 I' I: `. v, lmodule_exit(led_platform_exit);
' ^ M8 X) F3 Z4 J x" k* v' F) b8 V/ F& I p2 x: Z
MODULE_DESCRIPTION("Led platform driver");
, S. D$ A* ?3 e5 M0 jMODULE_AUTHOR("Tronlong");, x7 W6 V) N# I% i. k" _! h
MODULE_LICENSE("GPL");
5 W5 ~/ k: ~, K) K X
! r4 b9 V4 Z: X |
|