|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 ?. @& T. k7 {8 s, W2 M#include <linux/init.h>) R* o z3 o; A* ?6 f
#include <linux/module.h>; z+ O5 _2 I) ]6 K) v0 i% M. q5 y
#include <linux/kernel.h>6 g# h8 L8 K" @1 z) |
#include <linux/types.h>
{+ |: a- k, D" Q#include <linux/gpio.h>
* V& a2 a0 [: ?. ~0 x#include <linux/leds.h>& j+ _0 ^) M2 C1 r$ J" n
#include <linux/platform_device.h>4 q2 t, u5 i' q8 V9 A& m5 Q
8 v6 K/ e; M2 R2 y#include <asm/mach-types.h>
% Y3 n7 ~) {- L#include <asm/mach/arch.h>2 ^/ n5 s0 M0 C# O
#include <mach/da8xx.h>/ o5 `6 r4 J% e* o) J5 {/ w! P
#include <mach/mux.h>& ?- i' l/ N. j- @
% E- R7 c5 j3 S: @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ Q2 r% n/ {$ |/ e) T* Q' o7 l# J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ B7 Z& x; C# P7 o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 t; Q8 @; W# W#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 \4 ?4 X) h: Q. q
. }6 Y' l/ P2 ? b2 F$ n# ]/* assign the tl som board LED-GPIOs*/
' _, ` T q1 @' |4 {static const short da850_evm_tl_user_led_pins[] = {
& f& t% s% P V) S+ }- p5 a/ h' H+ c /* These pins are definition at <mach/mux.h> file */
; @$ U& j: l r3 i5 y; f! z5 N DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ ]' b: A1 H. Z6 |; ~ -1( ]+ ?% E$ n6 T; \- O
};
) s1 F3 \! ~( Z$ j6 D
; M) X7 E2 M H8 f9 n5 c5 C# f6 Sstatic struct gpio_led da850_evm_tl_leds[] = {
& G4 p4 D. y6 ^$ v: X+ T {6 x; y% O7 A8 X! i: m9 _* ?' r
.active_low = 0,: x8 e- R1 `, \4 i
.gpio = DA850_USER_LED0,! i7 |$ K7 w7 g p
.name = "user_led0",
% p5 r+ U/ ]+ \6 O .default_trigger = "default-on",! `6 [/ k/ R7 O, A$ L9 l( F
},
1 j3 H4 r U6 R" r" b& B: Y {4 i$ ?/ P' `; h# U# r
.active_low = 0,0 G' W r; J0 c; T9 X
.gpio = DA850_USER_LED1,* l" b) W6 ^; |+ M6 i
.name = "user_led1",
- e" {+ n! Y) F a6 u9 s .default_trigger = "default-on",
' _/ F+ \7 Z5 S$ O( C, z },6 a7 l. P# r% h
{3 h# r5 K9 N! z: |- g4 ~
.active_low = 0,% I: n' F6 Y2 u8 n6 x& f- {
.gpio = DA850_USER_LED2,1 ^- k# X7 U) L7 K! Y0 H! W
.name = "user_led2",
+ H& A" B& b2 i, k4 w .default_trigger = "default-on",
/ q- ]4 }) R% j5 D- ~: v/ g },& l; X4 ~0 \( s* F
{5 B, U" t' A/ [4 s W
.active_low = 0,
5 i/ y3 l7 k* a .gpio = DA850_USER_LED3,1 z. @, I" n# Q6 ?
.name = "user_led3",4 m( g' ]* {. \4 t1 Q9 @
.default_trigger = "default-on",
: G# p9 _* {4 p! ]1 x },7 Y* K& b* c) Z; }7 {+ j
};
+ a7 G" b f2 |% j. R8 _; R
6 ?9 q( D7 C8 x, c" l1 Y# P9 E! T- Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ U0 p$ ?, u* `/ U5 V .leds = da850_evm_tl_leds,! V: Z O* n5 T. e3 Y8 d
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 P" ?0 X3 G. Q1 I};
, J7 \% c! T- ]0 a6 W" Y5 d ~3 Q! Y
static void led_dev_release(struct device *dev)
* y4 C7 c; z! Q4 Y# i{
' b! g- w3 N7 {, L3 x" g% N9 M0 E B p};' W8 Y( r- ~9 x. z) T% H0 |
' j) x, J- Y( a& l7 F
static struct platform_device da850_evm_tl_leds_device = {
* z" {+ q8 a- v( p3 U4 C .name = "leds-gpio",- r6 \: l; R0 w9 i9 R ~3 f- E
.id = 1,$ i5 e& z! }$ r* }8 y% M3 y$ d
.dev = {
5 e( q& d9 v/ C; G- e .platform_data = &da850_evm_tl_leds_pdata,6 L" B( d, Q6 ^6 `
.release = led_dev_release,
; z6 b% P0 ^% m9 P }
1 q) T) L* S- L};
/ j: {& @# \: B. ^
& w" X7 m3 y" `3 g$ Q* X; Jstatic int __init led_platform_init(void)
# h% o3 V1 j/ I' X2 Z q3 e4 z{
' N' K7 G" d Q7 a int ret;
% g- t& t: W" Y4 D* a#if 0, g( g4 s: t% F% f" W; @# r* Y2 p
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! T y! t8 {" Y8 B' m# R) J
if (ret)
, ~6 g _" v6 q) R0 o pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" k- d, r# E, {
"%d\n", ret);9 s5 d0 u5 L# a7 Y8 J
#endif
# E& U" l% F/ C" ~" s ret = platform_device_register(&da850_evm_tl_leds_device);
) i2 H& h( L" q if (ret)
& N" g. A- }4 V) d/ m |; a$ i pr_warning("Could not register som GPIO expander LEDS");5 }! J. ?0 M) u! x8 z
else
# c3 \1 X' r/ g1 S: e8 G printk(KERN_INFO "LED register sucessful!\n");
* t/ n5 _+ d* ^: z/ P
# p" V( w2 t" W, n( w. y return ret;( c& ~# l8 i, G3 o Y( X
}
3 t3 Q% T4 I8 o3 X1 L, ^: r
" c: P5 r/ i" k$ L1 x3 O% H( ostatic void __exit led_platform_exit(void)
! Q3 r+ y8 r ^' v$ G r{
9 H3 [. ?1 D F8 k7 X# G" w platform_device_unregister(&da850_evm_tl_leds_device);
& S; a: l: l9 _8 i2 H) G
) E8 v& R- p! c9 g printk(KERN_INFO "LED unregister!\n");
4 `1 q! Z. j E; O}
( R( C6 _* L2 }% `) k7 t6 m5 x7 \
module_init(led_platform_init);; A& W: {: k. i+ Q2 V, l1 C$ ^) r
module_exit(led_platform_exit);0 h! v M. o& B6 ]( c; O6 o
2 g$ G1 }. h3 ~: g! c
MODULE_DESCRIPTION("Led platform driver");5 H1 }1 ^8 }3 x% f4 a
MODULE_AUTHOR("Tronlong");8 J" c, {! O; T* ]) _8 ~& e
MODULE_LICENSE("GPL");
6 [# B3 a8 x. E8 x# j$ D" S& [9 n/ N! O: q
|
|