|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, w& y9 |1 J8 X
#include <linux/init.h>
( b9 n1 j' v0 P3 j#include <linux/module.h>. `) L: `7 N3 F4 l
#include <linux/kernel.h>7 V3 M2 d2 C9 }" h' V/ F/ \4 K
#include <linux/types.h>
0 v2 Z5 I2 T( ]+ b5 V. |, [* `3 G#include <linux/gpio.h>! t& |7 z9 f' `, S' x
#include <linux/leds.h> v, @0 F/ k' \2 ~& _7 n+ W/ {
#include <linux/platform_device.h>3 C8 M/ t% \; s/ w2 d
% u6 @; W/ z* G( o4 @3 l/ Q5 r
#include <asm/mach-types.h>
$ \3 ^! _9 k" {9 J# G0 X& R4 D5 z! ?#include <asm/mach/arch.h>9 U6 |3 V9 S* r; j
#include <mach/da8xx.h>
4 c3 g# G" G: D#include <mach/mux.h>
, ~% A7 y% E# |' h4 D9 ^: ~
" J9 Z' C5 M! J n$ ?, s, z, M( R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! ?6 F5 z- j" `) ~, k, B2 d8 T4 B9 q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), @! i( \7 j$ e* q- `* j
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), l" s9 r) l, {7 e: {
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- ]/ m% R1 m8 B% k; ]5 B, N* S1 C: z
8 R1 t5 D2 R3 @! g+ y/ M! m ]/* assign the tl som board LED-GPIOs*/
7 W% V' }0 t- @static const short da850_evm_tl_user_led_pins[] = {
2 \! e% i+ P7 J) K9 k& `: J /* These pins are definition at <mach/mux.h> file */5 J0 x: ], g+ y" v O) z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
I; F+ h3 l* I6 s+ i' c8 a -1
+ \# t" B6 w2 ` m( n: o};
I" R1 L4 ]3 |5 |2 m7 w* J% q4 p3 \2 e! V( J1 \2 i8 A
static struct gpio_led da850_evm_tl_leds[] = {6 ^% t9 R9 Y6 v. g% b& A* w
{ ?1 x6 b5 Y# z4 y
.active_low = 0,1 f( z, E: J1 H4 ^7 T1 f+ O/ f' b, w
.gpio = DA850_USER_LED0,
( m8 e! z" j0 f R# p, c, a2 ] .name = "user_led0",
+ @8 J- T5 q# _* d0 v" D .default_trigger = "default-on",
9 C- }( p0 `* h+ ] },) y8 x' Z; ]$ L0 G' c" }0 H
{
}2 R+ j7 D n# T0 H+ l7 e3 }( v$ ^ .active_low = 0,
( a N, |7 B5 u' s f" r. F0 b .gpio = DA850_USER_LED1,
% |* _9 z- [: z .name = "user_led1",
( A0 r# E: d* `. e: W1 q .default_trigger = "default-on",3 p) Q1 S; c H3 [, a9 M
},
4 P+ N, ^3 y. X6 M {
. A9 [& F6 n* N6 _% ^ .active_low = 0,, @+ v8 Z0 |4 K0 {: ^
.gpio = DA850_USER_LED2,0 @7 \: P; Q9 p% h, l
.name = "user_led2",' S a* m4 W: Y' W% `
.default_trigger = "default-on",1 s3 s3 Q1 ^7 p5 \) n ]* p
},- ?5 X1 C3 n6 w& g
{1 X- }8 o8 C; b1 I5 k
.active_low = 0,3 h' {& c; G# J# w" E ^: _
.gpio = DA850_USER_LED3,2 @: V; j7 J8 _
.name = "user_led3",
3 c N6 j% n* u" {0 N2 Z .default_trigger = "default-on",
! r! z& h7 Q; a9 Y( w# o },# s$ ^6 I+ w. {5 S
};) L0 g# P. E: g& ?" g e
7 h; D$ I; H f
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, w/ H2 S* L: L, T
.leds = da850_evm_tl_leds,7 r1 G0 u* L0 o+ V1 W* O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 u( w4 ~, U6 B u2 h: V
};! _7 L) t# n* f4 H5 m- S. G; `
: |4 }: l8 e B8 W* nstatic void led_dev_release(struct device *dev)2 w8 {. s9 o- d6 y# O
{* c/ H g+ p( _
};2 x p3 t6 H7 Z+ x& \% \- ^9 d" ^
! ~9 v6 F; i% q0 ?
static struct platform_device da850_evm_tl_leds_device = {
+ I ~! `& i- g1 L6 J .name = "leds-gpio",
" x, x J9 }+ |3 g .id = 1,; b3 J5 o; T7 Z+ o6 d( a! o p1 G# Z
.dev = {7 M0 d6 p. ]$ h% G
.platform_data = &da850_evm_tl_leds_pdata,2 p3 m- m1 N, f! i) V& @
.release = led_dev_release," y( @. D# y( L! w
}
+ b k5 P- V, M$ u' H};1 H5 c4 B6 P: Z+ ]: ~- M1 o* N% u
6 I/ v' H8 u- ], M1 T& ustatic int __init led_platform_init(void)4 Y2 [ ~+ S4 y1 V& B; G6 o n# T
{
% E6 M6 z _. s, [% _- N int ret;" H+ B$ k! ]& ]+ h6 n7 |- Z
#if 0
) w6 F9 W5 F! h) V# k: J ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: K# b$ w. b' L' o5 ~ X6 R if (ret)
+ v; E% V* u" c# D( u; R pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 |1 |( a7 M9 J6 T4 G& z; I "%d\n", ret);
/ w: L9 D- A) C2 x#endif
' R2 q* r; s( B+ g' T# a ret = platform_device_register(&da850_evm_tl_leds_device);
# r7 w% t; C0 o& j if (ret)& {/ R2 t" }0 M6 w
pr_warning("Could not register som GPIO expander LEDS");6 Z* p2 [" Y8 @& E) k. I
else
4 c! n3 A, e% C, D5 U+ h, e) j printk(KERN_INFO "LED register sucessful!\n");& t, |" j) O" J- p- {' X2 x$ t; F
$ P- K9 {% I- b8 O5 N# ^+ g
return ret;
( e* ]' z+ o4 W' k, N0 W}
& J5 O0 Z! A9 ~( r; `: ]* r) c* X6 P4 S% O( M8 }, m# j0 V3 f V7 j( h, B
static void __exit led_platform_exit(void)
! m) r G. \. I! t2 `' ~8 u0 z{# Y* S$ ?; i3 K9 g9 }9 M% _& H4 F
platform_device_unregister(&da850_evm_tl_leds_device);1 C! n4 P) l: q- M, P
X3 m# U5 ~3 [: C! f printk(KERN_INFO "LED unregister!\n");
- |, j0 I; p) ^& u8 e1 d [}
2 f$ I+ j. r3 A! l& B6 c7 U# n9 t; R z
module_init(led_platform_init);
# f8 Z; g: o3 H4 g# v+ Mmodule_exit(led_platform_exit);; f; Q1 q% A: h/ |
; Q7 Y9 c: A1 D( R" v% TMODULE_DESCRIPTION("Led platform driver");5 V# F1 ]5 {" C" M5 |; x$ I
MODULE_AUTHOR("Tronlong");
9 m9 O# T! i5 x* p" _" NMODULE_LICENSE("GPL");7 m n' s6 w: `1 u3 b# W4 [
5 r8 X+ F( k+ ]% d0 j
|
|