|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 X p- w' E& M
#include <linux/init.h>2 s8 @$ i. q; U
#include <linux/module.h>
7 T/ I, z, T, U- v1 i ~( `#include <linux/kernel.h>
* A3 a% L( F" z/ \+ ?; A( a f#include <linux/types.h>0 {* _% q7 k4 X' [$ n
#include <linux/gpio.h>
5 s, f/ d% }4 H- p% Y- h#include <linux/leds.h>% l/ |0 b e4 X' i3 Z; \4 Z* C
#include <linux/platform_device.h>* g" I2 q; B3 `. U n! `. V0 r
1 T9 I2 h# }( Q2 c5 `
#include <asm/mach-types.h>
* J: x* L/ ~8 ^, W4 L+ f0 o1 Q#include <asm/mach/arch.h>
4 q- u& O/ A4 q* {3 L/ t8 a#include <mach/da8xx.h>
% t5 Z9 V, b9 J#include <mach/mux.h>: B- E! e1 }1 k; N. @
0 n% W% ^+ a/ h z- q7 l. b( q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 {8 [ l( q* u+ s#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 ~# |/ { u& ]" }3 C! x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" r g; l+ \4 G% b' ~$ r
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ P/ z u0 G4 C( p! M+ d' s! n( |4 r
$ Y5 {$ }. \- Q# O" M/* assign the tl som board LED-GPIOs*/
, i4 i4 Y3 T5 F' _9 N7 A1 K7 ]* hstatic const short da850_evm_tl_user_led_pins[] = {
( E; m) b# ~1 L7 o /* These pins are definition at <mach/mux.h> file */( b) b9 {1 Y1 |0 r
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% l! S; S$ u5 B2 \+ o -1
0 w5 ?7 j! M2 I! D: p};
+ f- A( r. ?4 @, ^) \* g' K* P: v3 }, B' B& Q5 g Q% E6 Q' p
static struct gpio_led da850_evm_tl_leds[] = {
. i, T2 F7 n2 [ {# {4 m- D ^. S% A
.active_low = 0,8 h% q* N2 z, k/ n) _( m. o# t
.gpio = DA850_USER_LED0,
; y4 X2 M6 t; I/ T .name = "user_led0",: a/ F0 N' m! o0 Q7 A! a
.default_trigger = "default-on",+ v. T) ~3 I$ s5 a; a' C, p# X
},2 H/ {5 W/ T: ~4 g: C2 m" j
{
- l" l5 P4 G. D/ l" V0 t* c .active_low = 0,
% n/ Q( b7 U. m" O, `) e .gpio = DA850_USER_LED1,
, \% z& U/ O& V: L .name = "user_led1",
1 J1 S A2 U& ?# U: @9 g1 V9 _ .default_trigger = "default-on",
7 i5 F' f# s5 E& d! E R0 j },
. `% \, y# o# @2 l6 |5 w {0 `, B; R6 K! S4 [' J8 A
.active_low = 0,! a5 l; Z7 F0 Z7 `5 O& b5 y
.gpio = DA850_USER_LED2,4 \* M9 G2 \7 ~. H. X, W, s; k
.name = "user_led2",) z8 Z( s# t' z# S: ]4 I
.default_trigger = "default-on",
# W8 f% G, o# Y! L! I$ z },9 a, I+ C$ ?! y# y. K
{) X. ]; O1 R/ v: ~; ]9 O) P! w
.active_low = 0,7 g3 \6 S5 z2 D- Z5 D* }( M
.gpio = DA850_USER_LED3,$ g& w" N; F" m5 x; j
.name = "user_led3",
! ?% V" W; V. ?" y$ Y8 V .default_trigger = "default-on",% A4 d! t$ r1 t6 R9 [
},) H3 y+ C* P& a! |* R1 t. e
};
* A& u; Y0 d& W* Z( q
: ^' i# T' W2 E! `static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. F- C/ u& M* z8 ^" Z .leds = da850_evm_tl_leds,3 v9 U4 H% `( w4 _$ x
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* T6 j. ^% [3 ?5 P# s3 m};
" g$ `7 Y) l3 q: W3 J
/ ]7 J- I* T: m: u! l2 i9 W, A' v1 X- ?/ Fstatic void led_dev_release(struct device *dev)7 X* h9 W, P3 ]% Z# q& \- ^
{
' n1 a" t) p. V2 |1 L5 p, @& m};
3 i0 ]' c; \2 x; D, ^1 [7 i# ]1 }# R0 t% ]- G' S8 ~3 c( s- L
static struct platform_device da850_evm_tl_leds_device = {
# @0 ~: J; y& [ .name = "leds-gpio",. d z6 J, g' p5 s. d
.id = 1,
! Y0 \$ k* Y! U9 @; C8 h* I .dev = {/ E! G' O! E- ]2 M- b% v1 V& D8 n+ i" X
.platform_data = &da850_evm_tl_leds_pdata,
8 N3 _9 y/ f* q) O! c .release = led_dev_release,
- ?2 Q: R3 D/ W3 \, Q* x }4 v* V9 o7 X6 x* j$ D) s) k$ _3 @5 X; i
};
$ s. [( o! x/ J$ e$ A; k5 A. x# A, a: u' Y
static int __init led_platform_init(void) a, n) m* K5 R; c
{
2 n$ A8 ~* B5 Z' g int ret;
2 I6 I; X3 h+ ^' B3 O9 d#if 07 s# q. F" p, M% A- G3 w. q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ y0 M! i1 [% o* Y# D0 n4 R1 ^; C if (ret)
; A( s' n7 n& ]: }7 T" n( {' A pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 q9 M5 Y% p) a
"%d\n", ret);/ y! A2 y: Q, |
#endif, F; y3 D- `9 P' @ v' i
ret = platform_device_register(&da850_evm_tl_leds_device);
* Y- x3 @% v2 c2 j5 `. y/ f) q if (ret)
* P$ X `* Z/ C& `3 @/ w& j( Z pr_warning("Could not register som GPIO expander LEDS");
. j _- i8 Q6 M- F$ }8 g else
R- m4 b5 ~+ _0 z: ~; a printk(KERN_INFO "LED register sucessful!\n");
8 i1 G8 t" @9 f8 i+ @) n: v& W
7 T6 X" k/ b2 @* Q- U return ret;
) Y1 J- x& v. S5 U! I9 ]}
7 y& d) \! N3 D0 }0 }2 H
s# e: V% h0 L b7 \static void __exit led_platform_exit(void)
5 H+ @1 j8 R( W2 k, @- d' d& X8 I5 A{
# J: O& ^9 `7 k" S' ` platform_device_unregister(&da850_evm_tl_leds_device);
* k& g5 S r, v# g
% N, V( W! ]/ R) j( ~0 X# r printk(KERN_INFO "LED unregister!\n");
1 f" K; b# ?; @6 u) {2 H- H# V}8 |) I0 l4 a% s" |8 M* {! ?* ]
- y+ V+ x5 u- F! o% y& N6 Mmodule_init(led_platform_init);! A0 g. {6 X& i `
module_exit(led_platform_exit);
9 G- K, F7 T; b% F) w6 Y
+ N" _4 m& K Q- m- RMODULE_DESCRIPTION("Led platform driver");5 F3 |; m+ q3 \7 U1 s& A, b$ f
MODULE_AUTHOR("Tronlong");- y1 r8 r- u; A: w9 [6 b. a
MODULE_LICENSE("GPL");
% N' c+ ^% U/ p9 N0 S+ W- I1 f
9 G( D4 W" _$ J8 w7 E2 u |
|