|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 t; Y. H: k' c* {5 X+ n1 n
#include <linux/init.h>: L% z$ ]5 B6 o2 r3 @& T' C
#include <linux/module.h>
- P! O& l/ r( A) i; ]#include <linux/kernel.h>
% x# O8 W) n4 r* F#include <linux/types.h>4 Z& o. F5 h! l3 N( A0 P! b& S
#include <linux/gpio.h>
: B% }8 T/ c$ g" F2 n+ \#include <linux/leds.h>! m2 |5 a5 @* t
#include <linux/platform_device.h>1 h; d7 J5 o1 N" y
1 \& O, s- Y3 I$ g#include <asm/mach-types.h>
$ z9 x6 {8 z2 {) C#include <asm/mach/arch.h>
( |- Y) q% U8 T. Q, G) Z#include <mach/da8xx.h>4 {4 C& A; k' V7 C4 J! U" L: T* ]& B
#include <mach/mux.h>& y2 ~# d3 f t
4 p+ ~) \- B$ x( k" ^* j" A1 |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" v- j6 x$ D6 Z/ w
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 C3 m- ^1 u: F" S0 R0 E, b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! t" r7 y- c. D5 g#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ c. v5 s* B' @! G3 ~/ L
/ J) P5 e, q i% y' L* P/* assign the tl som board LED-GPIOs*/
4 @, L! e: i1 H8 L ^" v6 ~' t1 T) dstatic const short da850_evm_tl_user_led_pins[] = {
, j7 j- ^. l$ H# N8 f* N3 } /* These pins are definition at <mach/mux.h> file */3 }/ u6 ?& ^2 M. m' n& t
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 F* w/ a. n: C9 F, r# k2 y -16 i3 o# H; \& u, B1 V+ l* h
};, I$ U# U a) v3 K9 ?5 R- D$ ~; _
! U7 n4 M% ?7 V# T$ p: @5 sstatic struct gpio_led da850_evm_tl_leds[] = {
" I) X5 L+ `/ E8 Q% L! F {
; v$ O i* E U, R+ H3 M .active_low = 0,
0 N7 z" x# L7 \. u .gpio = DA850_USER_LED0,' j' c5 U6 ~1 ^/ n# ~6 A, S! W
.name = "user_led0",1 y* A1 X/ `: c4 m5 ~2 E
.default_trigger = "default-on",0 J$ o! u* Q7 D% ~
},
# a+ t# m/ C& i9 v8 | {
C2 w% P9 P( Y0 R! { b. g r .active_low = 0,
" q9 ?1 U$ l- y2 A .gpio = DA850_USER_LED1,
( B0 t5 C7 a9 K2 L1 D# p .name = "user_led1",! u4 x" ?) F+ U
.default_trigger = "default-on",
+ j$ a5 [7 a8 [ },5 y" X9 N" }8 u) I( m+ \8 ?4 g
{
+ k/ u- m8 P e& x$ ?: i .active_low = 0,, f1 [' a( F( ]( X8 R) Y+ p
.gpio = DA850_USER_LED2,
; l' l+ L1 C/ ?$ _ .name = "user_led2",3 _8 z: w6 M) V% N0 u
.default_trigger = "default-on", C- A! i/ e; s2 j. d9 H7 Q) W
},
2 x- b/ ^: |" m) Y2 i8 v {$ G8 A8 B' {' o3 Z; [
.active_low = 0,4 A/ h3 {( ~# }7 k3 V2 C4 c) M- V+ s
.gpio = DA850_USER_LED3,8 N- ?( m: a7 j8 g+ B8 p
.name = "user_led3",5 m+ \/ E0 l( Y* ~( `
.default_trigger = "default-on",( j0 N: L& H! D# O( L
},
3 `) \6 b& t& ]" N5 M};
$ e" t2 Y! Q! N3 D; w6 \, F
/ [$ V6 U' o- ]" g1 vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ L5 A0 W P# N, ? O% O4 p( X
.leds = da850_evm_tl_leds,
5 { \8 I# _4 b, g& F6 S. j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ ^! K; J" {/ b- q* H
};
9 T- B6 ?1 B! x( }
5 o5 i# S. z/ P; k% M% h+ U: Astatic void led_dev_release(struct device *dev)% o" t# }" ], E) F3 p. l7 y. h" B
{
8 a2 J, v5 }7 v( K; ~8 R9 ~$ k; ^};. `* C1 n, a7 Y/ T# @
" H/ M. c+ @8 I1 |* p4 M$ V1 E0 Y' q1 hstatic struct platform_device da850_evm_tl_leds_device = {( F' i6 d4 |# d7 q8 ?
.name = "leds-gpio",
6 _ R/ Z$ V1 l) U" f- X3 y .id = 1,
# s( G1 c& \" q) V. e .dev = {
& f- `9 z. c, K& E! b .platform_data = &da850_evm_tl_leds_pdata,
. ^9 A! G( X! @6 h# U) g* e( v .release = led_dev_release,: D' P$ F& s7 V( [/ v: ^/ m- ^
}
* T4 c2 {: D# [3 S. L$ ?};. n& z {8 Z( v
' M) t! ^: f9 o4 _ B( z6 r
static int __init led_platform_init(void)0 o- y0 V, j1 Q+ d7 P
{1 M5 n7 u; V% x* |
int ret;+ E r- }% k" Q3 H- y& G i2 U
#if 0
5 V' M+ ~, G( o& R- S4 ^6 S! t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ L9 ~0 T; d% W& f# x( v if (ret)
' ` Y! f8 y# }. e6 R pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 g$ f3 i, V& {& V% z% q1 K9 a2 W# B "%d\n", ret);
4 C6 `# M6 c, s* S. Y#endif
- z6 k1 i& t; X: i7 V9 ?. i ret = platform_device_register(&da850_evm_tl_leds_device);3 {/ m5 y2 c: J8 a
if (ret)
1 r" o; j* v! k pr_warning("Could not register som GPIO expander LEDS");6 G4 P1 \( Q( F( ] b7 P( W( H
else
: C3 n* g2 j) \% H/ y printk(KERN_INFO "LED register sucessful!\n");+ ]. \. X3 n, r7 H) ^
+ ?4 ]) [. P5 P+ W5 a+ X
return ret;
$ j6 g( z" V- L: ]$ n, p}' B# D. W! y+ i6 b: T# A# l
4 _* Y0 F! K5 y4 l6 k. Rstatic void __exit led_platform_exit(void)
$ T# f+ k( }* r& T1 E' e+ c# S5 |{
7 [7 R% T3 a4 ~0 n. y% s' S platform_device_unregister(&da850_evm_tl_leds_device);
# C5 D! U, v$ f9 l' S( V5 g1 p* X2 X/ U
printk(KERN_INFO "LED unregister!\n");+ y+ M0 S& K. m$ b/ I( R
}
/ |) ~- |6 R/ ~. ~8 v
- @! q" h# `+ V/ ?/ n, W. Jmodule_init(led_platform_init);0 z# g7 t- H% g* c9 |8 x& p
module_exit(led_platform_exit);
2 P: A0 j( b' |( o3 V6 a; } }9 ~0 L
9 o4 {% {( M* P* wMODULE_DESCRIPTION("Led platform driver");
6 u% [9 s1 A- EMODULE_AUTHOR("Tronlong");* O& ^# T/ H) E0 f8 {- o5 l
MODULE_LICENSE("GPL");
2 g0 ]5 m8 o0 m) `3 \ _3 U- x; w e6 \; N% G
|
|