|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 {! ?) a0 U! L& M1 T#include <linux/init.h>
* o0 D5 `% o, y! Q7 O7 K3 t#include <linux/module.h>
3 `$ s5 s0 ]+ D#include <linux/kernel.h>
+ \% Q* p" b3 ]; J#include <linux/types.h>
2 r! `: `4 v" y5 l& ]#include <linux/gpio.h>' U! |3 u$ ^* D' i) V
#include <linux/leds.h>
- r# H. u/ t1 D/ L( Z#include <linux/platform_device.h>
( x) A" d6 L' q% v# U8 ]9 Z2 G" ?! K/ n
#include <asm/mach-types.h>( M; d3 ~% e1 @; b: I
#include <asm/mach/arch.h>8 O) { J, \ [3 N0 a
#include <mach/da8xx.h>+ J) H4 B5 B4 L6 m2 i
#include <mach/mux.h>" t3 {8 m! W; B) M% f
8 u7 v; X3 G4 `1 g& _0 i- ~$ A9 b
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. u6 z$ P; y% e% e#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 c, S" i5 g2 C3 d, d$ z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% A( P4 |$ y' |6 E' l
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ x# `8 N5 ^- ?% h2 p' f
1 x! z& A9 p1 [6 Y: O/* assign the tl som board LED-GPIOs*/
6 F7 a( k' |' xstatic const short da850_evm_tl_user_led_pins[] = {. n7 D/ s/ t5 E3 l
/* These pins are definition at <mach/mux.h> file */
& K/ z, s7 ~$ o' ?+ e DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( T" B M @7 ^* d7 C) `( x; [ -1- c3 @0 g: t4 ?6 C& S# s- q
};, j6 D& i* C- Y% i( c! L
# K* Q1 q, |6 t6 L+ C9 v* Gstatic struct gpio_led da850_evm_tl_leds[] = {8 Y" e( ~1 Q5 }: }4 V
{5 w% g2 \6 h, M7 a3 q8 G& e+ h# P
.active_low = 0,
9 ?8 J ~* w5 W0 H5 H .gpio = DA850_USER_LED0,
# X! F! L% K# q: F8 s' _# T5 N .name = "user_led0", k8 l8 f# ^' r' w B; o
.default_trigger = "default-on",: u4 e% G: G3 G
},
3 k* \0 F; z3 V; s {
" `9 Q; S' v+ {2 O3 V- {, @! |, m .active_low = 0,
0 F* N0 u& E9 k! ^+ m& S .gpio = DA850_USER_LED1,
' t! i% ?) R: r4 Y+ {! B .name = "user_led1",
* o. v4 Y7 [1 r( M7 g .default_trigger = "default-on", r0 x; y2 e) l# \
},* K- B" n* x, A* v+ t5 D5 I
{
% |2 B" m! ^$ }7 t .active_low = 0,# F! D3 u) Q& W; t- m K
.gpio = DA850_USER_LED2,
5 y. g/ P* P( i1 K! y! b/ m6 u .name = "user_led2",# ?9 M0 s& F ]3 Z
.default_trigger = "default-on",; f. ~ w: r; B/ M
},9 O/ s$ V; ?/ Y1 T
{
, i5 K# |5 O: x .active_low = 0,3 ~8 [, W, }, K8 A4 Y
.gpio = DA850_USER_LED3," |( I4 i6 U; M5 e
.name = "user_led3",
0 o* V, D' h) I& x& _ .default_trigger = "default-on",/ U' U9 S# c. W) ]
},
; O O! s6 a+ V) T, e! r};, B4 v3 U( d$ g6 k' f# a1 \! a
; ?/ A- I% m5 Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( S6 B" j5 n5 G+ L4 y& A .leds = da850_evm_tl_leds,
; S" y1 t: k: a" w .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! H% _+ k1 _6 N};
' {( z1 _, J+ J' Y1 b
/ j k( H2 ^+ D1 B# j9 Tstatic void led_dev_release(struct device *dev)0 P) e; n, N3 r. k: w( }
{
; C, E' {: d; q/ d9 Q* m0 I+ q};" p; e7 m7 O0 H5 @8 Y$ \
+ l, M; ]+ J- f3 l+ U5 }! `static struct platform_device da850_evm_tl_leds_device = {
) K) U2 X7 l l8 j .name = "leds-gpio",/ L" d" B3 J8 k/ v6 |
.id = 1,6 k9 o- \( u- @4 g
.dev = {
' N e) g' ~2 e7 r! t- p .platform_data = &da850_evm_tl_leds_pdata,
' [+ C; m) W! ]2 X! p8 A .release = led_dev_release,
4 k* B* ~! `1 o }7 Q+ A, u! q, k- K1 O5 J
};
4 e* y% {/ a* b7 P* i9 N4 ^: G" t8 `: }4 w% M# d
static int __init led_platform_init(void)2 p. R! ~1 I, ]8 T# a) }- q5 M1 b' y. r; H
{
7 C7 h/ K: T5 P! H int ret;: c8 o( a3 O% v% o: x# W. U9 I
#if 0
h: U' _8 R+ c, `6 G2 L' M# q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' F1 T* a1 ?4 K$ V4 }) ?
if (ret)
0 z4 D1 d0 ^ ~& Y' A! X4 C pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! L1 F7 l0 y! ]! d+ _) J "%d\n", ret);6 b( |6 v: b7 h3 a6 ~1 s
#endif8 O& d" B" r2 Z/ G% u
ret = platform_device_register(&da850_evm_tl_leds_device);
, z/ |3 O9 X# m$ g4 F$ W* F( Q9 P if (ret)3 m0 _" k; h. L& L+ G
pr_warning("Could not register som GPIO expander LEDS");& Q/ u+ d4 F1 _1 T# C
else
. }# w' b* x- J9 A& l4 v0 ~# f printk(KERN_INFO "LED register sucessful!\n");
% g( l9 H$ W5 `' _7 ~+ f4 k5 o
* Y( F. _5 N V) N3 K8 L& ] return ret;
, D/ D* w% w( R8 b0 [& f}
; m! k, U& T' x9 m
% A1 O( { w7 ?' pstatic void __exit led_platform_exit(void)
- `4 [; G' l, \% {7 S{7 Y( h7 U9 ^0 Y5 C+ |* K0 g H
platform_device_unregister(&da850_evm_tl_leds_device);0 B+ \3 [/ R! L
' h1 z6 y. U# o' e
printk(KERN_INFO "LED unregister!\n");3 Z% Q# b, Q" `, S& Q3 v
}8 A; T" G7 f9 G- [ ]1 V
( r6 r' v5 t5 h8 r/ |
module_init(led_platform_init);, K0 U, \0 r6 b" f
module_exit(led_platform_exit);; _- |9 {. n F/ q1 m* ^: ?9 K
& S; j5 `" f3 g4 ^" n& h+ z
MODULE_DESCRIPTION("Led platform driver");+ {1 m7 {* M; p0 X; I: W& K
MODULE_AUTHOR("Tronlong");
- c) K L" W H; fMODULE_LICENSE("GPL");
( x9 s7 w0 i4 ~( }7 m5 R
1 a4 _' b- n; S9 F: o |
|