|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) G$ I( t: U; t- C
#include <linux/init.h>
$ v q8 j/ v3 }% l: K9 |" q#include <linux/module.h>; ~# Y9 I' J: l* Y- D5 w
#include <linux/kernel.h>. G! ~) x3 S! u2 b8 H! G- G5 j
#include <linux/types.h>$ F' j% a5 p I
#include <linux/gpio.h>' g/ U( u* ]. w! o! [7 |
#include <linux/leds.h>
2 T+ d6 X% [7 S3 O8 G#include <linux/platform_device.h>0 V; ]5 N8 J. P @: t7 G
4 j& J D: ?6 ?5 E' {
#include <asm/mach-types.h>
( I. I8 V2 t8 S0 E6 h#include <asm/mach/arch.h>, h) ~0 k- L; l d- F" l- R3 k
#include <mach/da8xx.h>& U: n: K; x/ @: S
#include <mach/mux.h>
" ~' O4 N' o+ @2 Q
5 A p2 f/ j2 d. @) n% \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- l# ^- W. L/ l6 p2 {
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 ^; q- f5 w3 G3 y, U3 v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: [% k: l; q- t8 Q+ e#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 b* d( L0 m, _* h4 ^. P; W2 ` n8 o' L* O+ F$ Q9 O5 a6 n
/* assign the tl som board LED-GPIOs*/7 A5 D: [4 ?3 ~+ I; k9 |4 K
static const short da850_evm_tl_user_led_pins[] = {
' L! z* {: H- ?8 t0 D; b+ A( h /* These pins are definition at <mach/mux.h> file */6 a4 H5 y) `# a# Z' k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% p2 }) e9 `, p7 q+ d
-1
" Y; l0 m1 ^9 }1 [$ z C. n};
0 G+ M6 t3 ^% I5 C" m; d. E% E0 q" {) _3 {8 o. g1 I L
static struct gpio_led da850_evm_tl_leds[] = {
4 m( Q! G" w1 S2 |: d' B2 c {2 p: @/ k3 ~0 S
.active_low = 0,! g$ `- D( p5 f
.gpio = DA850_USER_LED0,8 \+ J( K% r& l: |
.name = "user_led0",
% c/ `0 |2 |; @# K" L0 T& l% ?/ s .default_trigger = "default-on",
9 [6 j# D# v3 }6 l( v6 } },& a! g% y9 c1 ~- E/ k/ E) W
{9 x) _% ~5 P4 ?% D O6 G2 u
.active_low = 0,
$ T( Y/ k' T# e' r8 E .gpio = DA850_USER_LED1,
1 R( n }" V# Z: o .name = "user_led1",
8 G ]: t6 f+ q5 s$ ]. p7 ? .default_trigger = "default-on", p# G3 p. e; U4 y
},- R7 Z. Y4 j. T4 k5 B2 J* }
{* [& S+ B+ B( m& S" |% @
.active_low = 0,
$ g4 \5 g8 `( |0 S .gpio = DA850_USER_LED2,* [+ i$ |* o% K6 Z. c% c2 ^3 j( ^
.name = "user_led2",
% W# K! a2 g6 w .default_trigger = "default-on",3 S( U8 s9 v5 l( K* n0 N& m
},
y& E. y/ J$ g6 z" l% G8 y7 Y {
% @( G& Y* p/ e9 ~. n .active_low = 0,
0 x7 i& {) l/ O. V: \" I7 o .gpio = DA850_USER_LED3,( M& K% {+ g5 x9 H
.name = "user_led3",
0 a7 L# A0 T7 U. w4 G F .default_trigger = "default-on",$ l: b; j) U5 I' F
},
5 K. `& S* k" e0 e# _- f};
9 |- b* A& _4 a0 u. r4 c
2 S$ ]9 a3 W! y) z, z: mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& V [ X/ Y/ Q: h* [6 k .leds = da850_evm_tl_leds,% ~* E+ W' c7 _2 d/ _8 X) j" c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ y4 @$ r J2 a a4 Q; i! m, v
};' N$ x2 W- M7 V2 W
, u. s8 o* E. M) ?4 Z
static void led_dev_release(struct device *dev)
- ^) Q' q9 e1 C* X{* `$ O( u! S) A; i5 K
};! }- f1 L& _# _3 a2 p
0 o; ]8 A# k5 M: s
static struct platform_device da850_evm_tl_leds_device = {1 N, q/ r. T: V9 |
.name = "leds-gpio",
3 @6 S8 z' [1 b( B: k1 y .id = 1,1 l- v+ O0 {. V2 N! Y' {
.dev = {
* C( |' K# ^ X1 x' {: E .platform_data = &da850_evm_tl_leds_pdata,
8 s7 \( W! C& t+ ?4 e0 ` .release = led_dev_release,
& c( a$ I6 v6 O L5 U }
, F% l6 _, ?0 i* A6 M. |};2 w+ ~( M- }( j' x+ K
2 i& @# S! R/ Z2 N: e) Gstatic int __init led_platform_init(void)& l% K) o7 }" R1 o9 u: ~- c. l2 E
{8 @3 d) X' ^/ j# Y& S( ~
int ret;, o5 \. D f' e' P# |4 Y& h, h$ ]# g
#if 0
0 g, E; ^; o1 ?; q9 y0 E: v" j% _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); [- A. n* P5 i
if (ret)
% T4 _* m+ J# c1 U+ E pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ f' Z H% e5 v0 V
"%d\n", ret);
9 A8 Y( I2 |; z$ r/ @* V6 n#endif; h5 _( Y; e! v. B5 P. P* R
ret = platform_device_register(&da850_evm_tl_leds_device);$ r, Q- J+ q: v1 R: _- I9 k
if (ret)
. Y: w, O1 j) o% V+ y: U! {) A pr_warning("Could not register som GPIO expander LEDS");
' c& {1 k% z6 ]4 T. x9 z! v7 J2 Z: m else
* \0 {- S2 q& X0 Y( a printk(KERN_INFO "LED register sucessful!\n");
, H5 h8 |/ A% b _0 M8 _
9 F, A% t4 }. q2 ~ return ret;
$ Y( G% D' M. K% J' ]2 K% ~0 g5 \ Y9 f}
( i# F# j% Y6 n7 [0 h# O
$ C/ n8 @) E' B2 u5 C9 Z8 ^static void __exit led_platform_exit(void)9 D8 n! J% Y7 m
{1 L( P8 N& N7 D! ]& _; `
platform_device_unregister(&da850_evm_tl_leds_device);' `7 G. m, q1 [4 i2 C8 F
3 G" ?7 h9 q3 n: H0 u
printk(KERN_INFO "LED unregister!\n");
2 N3 u# D6 l; T. E8 n7 E+ G" ~}$ r. z( K* C9 p* Q7 ^
O, |0 a2 z$ l& l* _4 ~: J
module_init(led_platform_init);& T, D- e k( J/ U% |
module_exit(led_platform_exit);7 d" A* s, \7 K8 p2 W
9 v+ `3 `4 I' t( E2 {
MODULE_DESCRIPTION("Led platform driver");3 T7 Q4 M- r+ @8 d2 X
MODULE_AUTHOR("Tronlong");
$ P. d; q/ w/ \& ~+ [9 o9 S( UMODULE_LICENSE("GPL");
6 Z; d, G `$ r! V F8 v! m, d4 g5 e/ u& k3 }* J7 @- a
|
|