|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 l& y9 k$ ]* W7 R7 l- H/ E; O
#include <linux/init.h>
( h( I7 D9 T* w+ D9 h#include <linux/module.h>+ b# V/ C+ M. T
#include <linux/kernel.h>4 {7 q! d, B$ b) C R$ M( y3 R8 |
#include <linux/types.h>" s7 W# N4 i* X7 ^0 g7 R* T
#include <linux/gpio.h>
: |9 M. O6 S6 w2 D( W$ C% C3 z#include <linux/leds.h>
5 R! u/ ~2 i8 Y s8 Z4 @, N+ g#include <linux/platform_device.h>
) F! ?# p% X, x2 O( _+ m" R
9 H6 |: z3 l' c* z4 A#include <asm/mach-types.h>
. ]9 m- S* Y6 _0 ]5 Z) b#include <asm/mach/arch.h>: {, k6 P! i. J% z# l9 {8 L
#include <mach/da8xx.h>
9 I# e) I7 I7 @& n. y1 H#include <mach/mux.h>
! ?2 F9 N. t/ m; d o O5 t! a! f/ r! U, G7 r G7 E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! C* W) g7 v+ F* A. W. O#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. M- w# Y0 L; d7 r8 Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- T5 _( T0 }3 w5 d#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) k3 M. y" r% J7 D5 W
; m2 `7 g* m% ^3 X9 I5 I/* assign the tl som board LED-GPIOs*/
% `6 n0 e# {4 {6 Y' M) Ystatic const short da850_evm_tl_user_led_pins[] = {
! D1 t5 J; A& M0 q; M# y /* These pins are definition at <mach/mux.h> file */
. }4 k& T" ~9 _3 ~" b- n' @ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ r+ [2 J' r' ?% {# V$ l; P+ z0 C -1
' ^ K& w' K, `5 t7 G% L. b* V1 W};
% \( J. T- H9 T% C. x9 m X7 ~7 L- d. q( ]- r& V" B
static struct gpio_led da850_evm_tl_leds[] = {
6 S# |4 \4 k) s6 z' Z* e, R {4 M4 m. u; B# w+ y4 _8 {
.active_low = 0,
: u5 O+ ~9 h! t$ ^2 f1 X+ f4 C .gpio = DA850_USER_LED0,6 z1 G) X" K1 G c" q
.name = "user_led0",
+ n/ h2 e9 N* D2 z; D$ T .default_trigger = "default-on",7 W0 J) y" {4 T6 S" Z% w
},
/ l+ |+ \+ E( k {+ h, ^9 p# N- V3 x2 u2 a
.active_low = 0,
5 {7 O, L0 x. {9 B: f .gpio = DA850_USER_LED1,# J8 b% m1 H, d7 P R
.name = "user_led1",( d) i( P$ h3 [5 I2 ~
.default_trigger = "default-on",
! ]: K" G W! V% \$ N9 K },! r! L0 o% c+ b; _
{8 J$ I% E$ \9 W, ]- {3 g4 M
.active_low = 0,
" V+ p4 v: b4 l$ Z5 o# T$ S% a8 ` .gpio = DA850_USER_LED2,
2 ]% C* ~& `3 \! h$ T3 @ .name = "user_led2",% l! X, w; ]2 f
.default_trigger = "default-on",6 _: `! A# k! z8 N) m+ Y) C
},2 o+ E) w* w' T# C3 [" D- I7 T
{& q! Q8 N2 @) c/ U
.active_low = 0,# Z* |, z6 w w+ y/ W2 t
.gpio = DA850_USER_LED3,
! F; y8 w+ S+ m5 E .name = "user_led3",
7 Q y8 w6 l" j- K j .default_trigger = "default-on",
1 l9 b2 N8 W c' ? _ },
1 y$ m) ^" c3 H/ W q8 w, \$ U};
; g# ]% s$ p3 x. Y1 A3 K* s6 U
- O9 Q) T* Z* B% Y- cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: k. ^+ v0 V, T0 s, ^ .leds = da850_evm_tl_leds,. u/ \+ F; l5 F0 |
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& h% V" p( k% i};
- f( X r- x2 w1 k' c. s w! N- Q$ H$ r. p
static void led_dev_release(struct device *dev)& Q' N- ^, C+ D3 u4 ]# u9 K6 `
{& O: ?# a7 R3 `
};/ N E: X: z; h0 s0 g4 p2 D
8 u& q" ~" D- C* m$ e( v$ dstatic struct platform_device da850_evm_tl_leds_device = {% n: E- b9 o( w5 \
.name = "leds-gpio",
# ?) X1 d6 K/ n. J+ r: O! U .id = 1,
* X$ O! q9 n' k. H) W .dev = {
2 d% H9 \) w* S5 H6 b4 A# w .platform_data = &da850_evm_tl_leds_pdata,
f* E! J) \. b/ R: \ .release = led_dev_release,0 j) p- z8 j* A z/ @
}8 }4 q" w: f& o5 x! u
};
' A: [- j9 y! |# _; \* V) e- u; f3 D. }
static int __init led_platform_init(void)
% X: {% \" B. x' s( B5 f{
- p5 A# y7 Q6 s int ret;
3 B, U; D0 G( I6 [#if 08 C6 Z7 W7 c# Q4 \$ }. u6 P
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% j8 ~7 V+ {+ T+ n) {# L if (ret)
9 X$ w4 R- Q+ Z" u7 I4 S ] pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! X+ ^' y/ _. {0 {9 [9 F' A0 V "%d\n", ret);
; e: _4 ^( m& n' a" U0 [+ S1 Q#endif
9 j! X% Y5 B$ D/ ]3 X3 V* E# e2 I ret = platform_device_register(&da850_evm_tl_leds_device);
6 l$ i, K( [; i6 m* g1 }/ q if (ret)
. [, `) h* ?! O& m. p, f7 t pr_warning("Could not register som GPIO expander LEDS");
7 y$ ~& T+ ^2 Z else
: s8 t3 L" y7 J printk(KERN_INFO "LED register sucessful!\n");) j$ {9 x5 v% n( G4 d/ P
0 l* q9 w0 @5 T return ret;8 V. i& ]' k$ i) n- n& v
}( i, t" {2 C% q& g' Z3 W
: p* g( \: K7 {static void __exit led_platform_exit(void)
: C* `9 T: I" c" j9 p{: m6 A; e, c: p$ p! d9 Y" P3 O
platform_device_unregister(&da850_evm_tl_leds_device);
) Z: P$ \( ?/ ^4 O. s9 `
$ T# [% s" ?& P; L' D; J4 ? printk(KERN_INFO "LED unregister!\n");
2 H3 [7 F3 z3 x4 O7 S}
! v/ l+ P+ M" s3 o& ^0 r/ }/ b: _$ T% O% o2 O
module_init(led_platform_init);
. ?: T# s o# Smodule_exit(led_platform_exit);* C4 g" X* g3 q( i* {
' T" s& X/ n# a9 I; GMODULE_DESCRIPTION("Led platform driver");) I% n$ T2 |' J2 M
MODULE_AUTHOR("Tronlong");% Y) c4 W+ H; g/ Q& ^% V
MODULE_LICENSE("GPL");. J! u- j, J' W. n; r4 }. j
6 u' e" \# A) i, Z v" g1 C% m0 v1 j
|
|