|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* B1 E" r* p1 b4 _& U8 f( i+ I, V#include <linux/init.h>% _% L4 V7 ]4 k/ t) U4 n
#include <linux/module.h>
- G D4 f, } b8 D4 S+ w& x#include <linux/kernel.h>8 o! N# R9 @8 w) s8 S
#include <linux/types.h>
6 S% ]3 K, O3 O- Y1 A3 z8 L#include <linux/gpio.h>+ }! d; s# U+ [% W. `! u' _8 b' H- S
#include <linux/leds.h>, v( D+ o. Q6 y% Q1 k& m4 M
#include <linux/platform_device.h>9 a. B! o* M# W5 _) a5 x$ g' l6 G; \
/ B* {3 s& z8 N0 e* e; P#include <asm/mach-types.h>
* U' B: f, H/ G#include <asm/mach/arch.h>
5 i$ v: P# \( g# R8 c8 \& a#include <mach/da8xx.h>4 Z2 X8 Y0 X: a9 Z/ a7 I
#include <mach/mux.h>
9 E' T+ l3 K* a- }" l- B
& B5 \% @7 l5 d. P$ c8 ~#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* c! _' u* g& o! [/ [# T/ q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 o6 N, v1 O) k& T. p; B#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) R8 }+ d9 `- n- K& G
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% V* r- Q2 ~$ S5 w! h
6 v$ F6 U8 X/ `. X" D
/* assign the tl som board LED-GPIOs*/' d% Q% P2 U& V$ W4 s! C
static const short da850_evm_tl_user_led_pins[] = {3 y: l \! ]6 W) }3 M+ C6 m& O
/* These pins are definition at <mach/mux.h> file */7 r8 D( u q, c3 o" c
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" J$ _! Z( S5 Z4 R -1
' s. n( M( }# v};% N# H% j& [- `9 H# R. }, L( k
) ?. G* O, D" a. t; W X
static struct gpio_led da850_evm_tl_leds[] = {
, X0 g' b7 v( ^" {& r {- ^ E$ ]! t& C$ W/ }) v$ v' e' f1 {
.active_low = 0,6 I5 l$ b# @5 \% O/ K/ s
.gpio = DA850_USER_LED0,
3 y6 U8 V( K* B' R$ V8 _8 m; } .name = "user_led0",8 P( H3 ~$ M# n6 k9 r
.default_trigger = "default-on",
4 K$ H+ V/ B: Y2 y2 p8 [ },' \! M! ?) J( I4 `
{$ ]- \" L) R- \. G+ e/ l
.active_low = 0,
! b: K$ h5 Y" }# r/ k5 W .gpio = DA850_USER_LED1,
) u9 c( p" Q1 e7 N( Q .name = "user_led1",
6 u. n' d4 \! o0 a( ~ .default_trigger = "default-on",
$ h1 b" N n0 l+ K0 r: k; c5 F+ K },
2 [* Z# v/ ~/ z3 l {) n* V7 ~+ |: y# i8 | l
.active_low = 0,7 s; g( q5 x( [- S
.gpio = DA850_USER_LED2,8 Y, [: o9 i- L. t( C. R0 E
.name = "user_led2",
4 F$ o6 N; v2 [. P# X .default_trigger = "default-on",
# m; X7 `/ _* \& b6 s },1 J8 Y- t. n# n. W5 z
{9 z, r8 x P5 k* H
.active_low = 0,2 N: n/ }/ ]9 |' G k0 F
.gpio = DA850_USER_LED3,
1 o0 C% x" M! Z7 [7 o% p9 s" V .name = "user_led3",) G/ M2 |8 h' Q, h
.default_trigger = "default-on",
* o4 L% a V) G/ W. D },
1 Y. N7 A1 g8 @3 o! P};3 D9 V6 I8 c( h2 Z) R. E2 D
8 g7 c }: o) R6 y* B& d" h
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ e: r$ o, P$ i: V6 Z& _1 w .leds = da850_evm_tl_leds,# L7 k$ B! L% q$ x3 g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),' O: S7 w7 S$ `
};* I# s- `" r8 F) i6 P
* N6 z0 |9 u, o; x
static void led_dev_release(struct device *dev)2 ^/ b( p" S8 O m4 ]& }
{
5 b- L( ^0 I7 k# T};, ]+ f( v! Y/ y5 F" U$ ~7 W% c0 p
$ A( n% F/ D: J' f
static struct platform_device da850_evm_tl_leds_device = {
9 P3 P$ Z5 X4 ]/ m8 f .name = "leds-gpio",
- ] M9 C [# y" a: q% V .id = 1,7 |5 x# B8 @- ]" k. c8 O' u5 o/ Q o
.dev = {3 b* H3 U, l4 P3 f" F7 T! n+ a3 L
.platform_data = &da850_evm_tl_leds_pdata,# x! S$ m$ _/ L2 t5 X# u6 K- v
.release = led_dev_release,
2 c/ [4 w% j( V# D, G7 G+ M. [ }
' P- I1 N) ]6 R2 e* ]1 \1 E};- ^" p4 U( d# z4 U5 a
4 V" e; a9 Q C( X
static int __init led_platform_init(void)3 v- J" @: w I( f
{2 J5 d4 G; A. ~ s& Q& _
int ret;
) X4 Q0 k+ v2 k: \( ]#if 0
/ J4 m: g& Q+ ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ e; a* k2 V/ @ if (ret)
7 s* b8 Y) \, R; i pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: {: _- C3 M! m( S4 o; i4 c9 b "%d\n", ret);
3 x1 E, ]! N7 Z% P( ] o#endif
; i) r7 b* D: E ret = platform_device_register(&da850_evm_tl_leds_device);
7 d* f* [ ]; \# L if (ret)3 K! j* a4 |" W8 f
pr_warning("Could not register som GPIO expander LEDS");
! \0 x" p: g5 {0 e3 ?3 e else- E3 [: | M7 x
printk(KERN_INFO "LED register sucessful!\n");1 z+ m5 l! f; Z, A7 R
1 y4 a1 k" D! v! X7 T- r! z return ret;
: F( B) F# r% h}
1 }# A: D( R- o- g# y
3 b+ t5 O" r+ H7 u1 n8 Y0 lstatic void __exit led_platform_exit(void)
' A" i3 Z) K3 [7 I8 M8 Z% t, u{
' m# w. j8 J& R: S platform_device_unregister(&da850_evm_tl_leds_device);
7 C4 l/ m3 B2 E" B9 w+ Y0 N
7 ]* d& O) G, B0 y k+ _ printk(KERN_INFO "LED unregister!\n");* b# k, s! l) z; X8 O
}. m2 T" P6 ]; {+ G% L' t5 L7 a
$ x2 c# y, h6 m! V0 d9 q, }+ q. @module_init(led_platform_init);8 s- ~9 Q& j( K1 D
module_exit(led_platform_exit);
8 q# T+ l, B/ b2 g* n ^1 D- M' j8 R: G. `; o
MODULE_DESCRIPTION("Led platform driver");
1 U) }1 T0 g- s$ P% b/ [MODULE_AUTHOR("Tronlong");
2 w4 c; n, A$ D) m% EMODULE_LICENSE("GPL");, v4 \& U% u$ L9 W: j8 U
, y0 r! P O, t8 `4 ^" _( @) P9 T |
|