|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; z Y# u6 X/ O5 b& \#include <linux/init.h>
( V' ~" _/ w3 U* x% j" ^+ ~#include <linux/module.h>! r9 e: [; s# ~8 j. |, S" G
#include <linux/kernel.h>
, D7 r. Z* ^8 ], p6 g% }* B#include <linux/types.h># i& @: _/ r) Z/ Z
#include <linux/gpio.h>4 g/ y1 V# m2 b. b- y- S. v( d
#include <linux/leds.h>+ u. p0 j: B" Y, h4 T0 D% D+ z
#include <linux/platform_device.h>
0 Q! x+ E; K+ Z3 z M2 E3 S6 ~$ c8 p! d1 @- W
#include <asm/mach-types.h>( b6 O- C5 e" _- `! f
#include <asm/mach/arch.h>& f ], [0 R- C, U' R* J
#include <mach/da8xx.h># R" S4 {. y) a3 k; [
#include <mach/mux.h>
4 r) Y u' Y5 `% s' F' r+ s
; M, U) L5 S# s8 `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" R$ W Q9 [' N#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 l9 R# P0 D& w& V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* f6 c* F; Y9 q5 j8 j3 K& ?#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 E$ [# @+ X; H" }) ~1 j
: g9 k. l( M6 ?6 g# G/* assign the tl som board LED-GPIOs*/9 {, ?, L; S' v8 ~& F" @
static const short da850_evm_tl_user_led_pins[] = {0 {0 U' L _* X5 h( o
/* These pins are definition at <mach/mux.h> file */* m& P0 C( f! O# x5 N& y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, T& L) H! C* Y5 R! R6 e1 @
-1* m* e0 ?( f8 u0 Y4 A/ i) u
};0 ~7 T' ~& b1 i$ v; x! G0 ]" A1 c" \
# |. g. ]( A0 e% m3 B7 V
static struct gpio_led da850_evm_tl_leds[] = {2 N) p& R( j6 Z& t, O, k* X+ k
{
) ?) |: T" J8 \$ k" ^" x" A5 ^- ^ .active_low = 0,
0 ~/ V% h6 S8 e$ R6 K .gpio = DA850_USER_LED0,& }# e0 e3 W6 h l- T
.name = "user_led0",
( t% O. z; [* X- S9 ] .default_trigger = "default-on",
# F$ e3 W$ F" b* m },/ c; q4 v9 s/ [4 k C3 k `" p
{
( }! ^* v' M& K7 X- P+ t C .active_low = 0,
* O: b$ g" W: q8 G9 } .gpio = DA850_USER_LED1,
! f* L* d3 H1 m# x .name = "user_led1",* H5 E7 H6 S) d
.default_trigger = "default-on",
% S. C. O- T! K5 C },6 \+ T, h l2 ?) h
{8 l5 `. L$ f9 e# d, o! c! F
.active_low = 0,
9 v3 S$ Z6 f) Z7 \ .gpio = DA850_USER_LED2,! m) s6 Q/ G) H, g1 E
.name = "user_led2",
, g7 y: ?6 [% U% k, A) w# S .default_trigger = "default-on",& g% h* I0 V% i/ q0 B% {% R
},' h$ y: r8 H. L+ q* W
{& Q2 b6 |/ b- ]+ a
.active_low = 0,
7 V1 z% k5 o# @ .gpio = DA850_USER_LED3,
& o3 T% O( i% j- E* c8 i .name = "user_led3",% U' L& d$ L0 ~- u
.default_trigger = "default-on",% w8 @ V' Q% P" y' z/ H! Q) n
},. W# h2 `2 P: |
};
9 d' l( t% @3 D( B( A# ?5 Q k! L" d: S* R2 _$ q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 n" n2 q/ j+ [2 T* q
.leds = da850_evm_tl_leds,
! ?6 P: [3 `* V! V4 d .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 A& i+ Q5 X% j3 U};
$ }3 V& [& H, l6 L% G5 V8 M# P1 {. Y
static void led_dev_release(struct device *dev)" b1 ]' s3 a' [' s+ B
{
$ P& _- V2 w. x$ z};
( I5 y9 |! ]6 {* r, P" p( {
# k) t2 a g; b5 g8 \- Sstatic struct platform_device da850_evm_tl_leds_device = {
f) D* B; H X& O, R .name = "leds-gpio",
; z7 c ]; M$ f+ S. x .id = 1,8 {* E. U8 s! o; R
.dev = {6 E( T: Z) @# F5 x! e# T/ \1 m" f
.platform_data = &da850_evm_tl_leds_pdata,
, @% i. L2 {( T0 q8 Y .release = led_dev_release,2 h/ a) r5 \* Q8 p+ g% F7 [
}
2 L/ O' H' V0 n9 k};. t, F) @! _% X$ m! \$ ?5 B4 s, x
1 Z' s# s4 z7 B5 c; Gstatic int __init led_platform_init(void)( O! O, J. t; }# k8 z
{8 U; S/ I) [9 j3 J% D$ [
int ret;
# d6 G3 l; O) z' c" i#if 0
$ y- j R7 H; t" {& ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 M+ p/ D1 z A" O0 n# `9 o if (ret)+ R% n* q. {& R9 I5 r% I ?% b
pr_warning("da850_evm_tl_leds_init : User LED mux failed :". F( L+ y' Z S( _3 F" {4 V" t
"%d\n", ret);0 @/ _3 R9 n7 i) M3 `1 e+ R
#endif) R& Y9 x8 V( D: i
ret = platform_device_register(&da850_evm_tl_leds_device);9 W7 C5 o# Z- C' g$ m
if (ret)5 N# c; g( M4 I
pr_warning("Could not register som GPIO expander LEDS");
* n- e& Q0 X! Q" K, B. ]7 {( E' q else; B2 L. N3 D6 H0 D8 s K
printk(KERN_INFO "LED register sucessful!\n");0 t' ^' G- F2 h8 k# x* M% c
% Y; {3 w1 q0 x5 P( ]5 X x E return ret;! P( r( [/ o9 n9 U" H4 E( C/ w3 ~8 `0 _
}
) @6 K/ r7 p0 j* ?$ x1 s
1 y$ u4 f0 J- t) J5 g# B/ Q2 Hstatic void __exit led_platform_exit(void)
0 L' S$ d5 S* T& ^/ L0 Z{
. d! ?& |! S2 X platform_device_unregister(&da850_evm_tl_leds_device);
8 I. _3 `9 E5 |/ l* U5 b( S+ w7 v
2 T9 B% _7 E9 G2 r2 r+ v8 K3 G/ t printk(KERN_INFO "LED unregister!\n");
: C0 ]9 n) P A/ ^}
/ l1 a& v; u' E, j+ a: y8 r/ G9 O: _; M& G! T3 k; o3 T
module_init(led_platform_init);
- y3 I: f" Q4 S. v/ I, Dmodule_exit(led_platform_exit);. }! F) d. t" _# K" \
$ s. }3 d$ y7 \! B
MODULE_DESCRIPTION("Led platform driver");
, n" z. _1 P) P4 T! e. PMODULE_AUTHOR("Tronlong");
3 S1 s. `2 t8 QMODULE_LICENSE("GPL");
; G6 l4 R8 p; f N- B" Z- Z x( w4 ~' n
|
|