|
求大神给下面的程序做注解,请稍详细些,谢谢。
* N+ k+ F" v9 j% j, A#include <linux/init.h>/ q. i2 F O! [8 v* Y K* }# K' P! Z; c
#include <linux/module.h>3 X7 d9 x' ?% w9 a! g! a. F2 n/ ~
#include <linux/kernel.h>/ Q# f! j$ P3 D
#include <linux/types.h>" X! @! ?) _- p0 c8 x0 l
#include <linux/gpio.h>
, }2 \7 j3 H. j0 n j8 f#include <linux/leds.h>
- }! B' s0 _+ ?$ _% X#include <linux/platform_device.h>4 D) V/ f8 `: t& Z4 M7 G
b) ]/ D3 I( G: G) V#include <asm/mach-types.h>
- o' b; ^9 }. @* U4 L#include <asm/mach/arch.h>& R* C9 n1 l( N5 ]* J% E, E
#include <mach/da8xx.h>
6 K. _& `& g e7 n8 ?- I7 G7 g#include <mach/mux.h>
4 |. i8 j6 r5 F" j2 x' O! p0 U# C3 K
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ u+ e6 |, `" r* ]2 ^
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& H$ D% z/ G4 A% h
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& k( Z0 L. ?3 n( e/ w) K; C& k#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& b8 w# @: f+ X9 c
: _5 D, [1 R0 z$ h/* assign the tl som board LED-GPIOs*/
, @' [3 v' m" i+ N( rstatic const short da850_evm_tl_user_led_pins[] = {
: k2 H2 a3 i- k+ B8 b /* These pins are definition at <mach/mux.h> file */. ?* ^7 P0 a: ^: d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 r# v2 u5 j# Y5 \: q$ W: P -1- ^/ ]- V2 u* | I7 U: V2 X
};9 P$ \4 Q ~; \- |5 f
& o% ?$ x9 {& O- f
static struct gpio_led da850_evm_tl_leds[] = {
! v) P6 e8 @( u' ^5 D6 N; E+ V {
# n2 `. g+ Q V2 m& T' y& J .active_low = 0,6 }6 J- ?, d- ^- k; Y
.gpio = DA850_USER_LED0,1 `" [: ~3 \3 r* ?% f& [& P& A& a
.name = "user_led0",- F* m) `2 l# k _3 g$ {+ B
.default_trigger = "default-on",
; V1 ?& j0 n2 p8 a" G },
) X2 d4 h% x- Y { z, ^- ~1 F5 A: j
.active_low = 0,1 I+ d( [$ w1 i: o
.gpio = DA850_USER_LED1,
& N' Q9 f2 v+ t# S5 f .name = "user_led1",% g8 u$ z& S% j, W1 |1 o
.default_trigger = "default-on",; M3 V! A4 G, z. [& [; i' r
},* d& \# y. N6 B% _' `2 n
{
( w' Y1 V5 n+ X4 ? .active_low = 0,5 I/ }7 t! ~! Q; f- I+ ?; i) d
.gpio = DA850_USER_LED2,$ [" w+ D: U$ Q3 [4 i# i% @
.name = "user_led2",2 o) b( X# C( e! p' O4 y, N
.default_trigger = "default-on",
: H" Z9 ~' b. X },
. r4 c# ^7 f! r; D0 [% z {8 M- G& J) n4 n" p! ~
.active_low = 0,
- F$ _3 B8 C9 H `' P .gpio = DA850_USER_LED3,2 z+ O( ]) j. o9 X
.name = "user_led3",
& N, h! f2 W- I! A .default_trigger = "default-on",, J3 _0 O9 g+ }5 p1 h
},
) i4 P0 f. ?/ d$ g6 ]# d7 D};
$ c& l6 N; j& a( ?
) m3 M8 R( c0 O- n& jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ N( B; m- T1 x ?4 V .leds = da850_evm_tl_leds,1 u3 Q9 z& X' q( K2 X
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),, E) `9 y. |" E+ g$ d
};
/ j: d. ` O3 j% E) ?8 V- G3 j
static void led_dev_release(struct device *dev)
0 z, q4 s9 p; X# K {{. L3 ], j" B; H6 F( D3 h
};# `5 n- w$ y& Y4 r; C% q
; V+ o4 f6 B- }2 M2 l
static struct platform_device da850_evm_tl_leds_device = {& S. q9 W9 Z: _2 f+ q
.name = "leds-gpio"," l* h* C' a( u6 _ f
.id = 1,* B6 h( E6 X* ?- ~ J, F+ U5 C) O# e
.dev = {
* L' P* N' X& _ .platform_data = &da850_evm_tl_leds_pdata,( w w& j- e7 C4 }2 k# J# u9 {
.release = led_dev_release,
' [; B0 b/ L- D7 K+ b6 R }
! _- V/ n4 W: T$ b9 [};
# p& i; e9 |/ ]0 i0 L/ D. M0 z
! C4 G+ S" G5 { x# ?8 Vstatic int __init led_platform_init(void)/ L0 b. R7 B6 U, B
{
* O) `* F) @9 Z& I int ret;8 M$ Y* o: o$ G7 j: F
#if 0$ I+ v; y' d; V, x
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" `: W) I7 Z/ T. y: l$ A+ z if (ret)
9 T0 ?$ `; Y- B3 s( Q! t. [$ p pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 N( c+ e% o( J+ a* [4 u5 ^
"%d\n", ret);
2 n ~- l Y4 I5 G, x, b9 @#endif8 b1 a. h! ?1 }1 D
ret = platform_device_register(&da850_evm_tl_leds_device);. l1 ~* j6 A- G. W/ T
if (ret)2 X- Z& a* j- b' K p+ U* X
pr_warning("Could not register som GPIO expander LEDS");
+ Z( q) ^3 F+ F! p" ` else/ f! J0 q& C+ D( Z/ [5 h; p
printk(KERN_INFO "LED register sucessful!\n");
( O0 p2 K/ O _+ F0 m7 y
2 s/ T/ d: M0 B4 _2 i5 Q k, Z return ret;5 R2 O, O1 ?1 R$ R
}
* l- s2 _& Z9 I, U, y1 | ?: [- Y3 [0 a1 h& Z5 l
static void __exit led_platform_exit(void)% d5 v' n! Z+ A1 g7 j1 B
{
9 q- U4 Q8 C$ W W8 j: T) o platform_device_unregister(&da850_evm_tl_leds_device);% W; o, d( X- m
, d: |5 Y- ^$ I A) ?* F5 Y printk(KERN_INFO "LED unregister!\n"); i' a# e* Z7 g: I
}
3 ]8 I: D/ H, z) `5 o, C: j! }- ?' x( M* j5 b+ m6 W
module_init(led_platform_init);1 m" N: ^* e( q) N. q7 x
module_exit(led_platform_exit);
( T2 Y) r% ?( z) d/ f8 Q e: n8 N0 k
MODULE_DESCRIPTION("Led platform driver");
& ?6 a4 g1 i$ o; P- X4 HMODULE_AUTHOR("Tronlong");% ^1 C9 T2 B0 u: u4 E, K
MODULE_LICENSE("GPL");
! K' X# d/ @! w, z; j% x
d! f7 }5 Z4 } |
|