|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 Z4 g+ | N6 S6 e8 v5 `& G
#include <linux/init.h>
# q. U" O* ~ y$ {& N+ _#include <linux/module.h>/ S! \7 v1 S% B6 p, C, M9 N
#include <linux/kernel.h>/ h- t3 R L/ g$ {) L
#include <linux/types.h>
5 f, a7 Q! o% c2 f#include <linux/gpio.h>* B* o$ R8 `7 j' B, s: ^+ ?3 A
#include <linux/leds.h># U. R% i& n9 I' t
#include <linux/platform_device.h>
6 t, _9 W. P0 I& h5 L) l \( U. n9 i1 w9 Z
#include <asm/mach-types.h>
% m9 e, Z- g* }% E#include <asm/mach/arch.h>
+ V4 W" [3 m, I1 ?#include <mach/da8xx.h>9 q" l4 o U: R! c" g" ~' V
#include <mach/mux.h>1 a) F: S' \$ H, n0 i& I
& O% i2 r% ^( y" ~' I; J+ j
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- a A6 O2 w6 z# F @#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 i" K" A) \4 i7 F/ f& V% ]1 u% I
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( D" q- l$ m2 j, I4 \0 W0 T6 l
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 E. h* M0 z* m* P* D' j
! D6 E5 G* o- B' i$ ]
/* assign the tl som board LED-GPIOs*/" M0 ^ |/ M& _7 P
static const short da850_evm_tl_user_led_pins[] = {3 z S6 o4 o& M6 m, [/ }- T
/* These pins are definition at <mach/mux.h> file */' X) |$ H4 H. F/ S* f/ [# {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," \3 A9 b6 K' ~
-1
" R: [4 R( S9 B( K! ?7 l};) O# ^! N# }7 s
# c/ D( Z; n/ V. fstatic struct gpio_led da850_evm_tl_leds[] = {& F3 i2 W: w) d* ^& U
{
* c/ O$ [* b9 O- A5 L .active_low = 0,
9 a% l: ^' E. K# t* |/ X .gpio = DA850_USER_LED0,
+ `* w# ?" f5 e9 h- ]+ G: D, a! O/ X .name = "user_led0",
9 n3 c. Z$ X7 h+ o0 N0 G2 K' @& L .default_trigger = "default-on",7 j: ^2 Q2 E5 B( o
},
* R; N! i1 U7 t7 X; O {
! k# {- P! L# f( t t .active_low = 0,, ?, i+ _( D+ t
.gpio = DA850_USER_LED1,' G/ K v; a& n
.name = "user_led1",
! c; t4 H; F# I5 m |$ [( z .default_trigger = "default-on",
: T* r0 Y( d. q( ` },
' }$ |: y0 V4 F/ [' x5 i {+ j* G7 R8 p x8 u) v) C2 P
.active_low = 0,
# _- r5 N6 E& ]9 ^# o, z .gpio = DA850_USER_LED2,
: Q. t4 _8 g+ r% q, J4 H .name = "user_led2",
/ D: Y0 h( |5 [2 k2 J/ X5 E .default_trigger = "default-on",
) X- C. A2 J. R4 [. Z* g. L },
3 P: `6 B b5 a4 E% @* N4 X2 K5 y {
/ [5 V4 l2 y% r7 X& E' q .active_low = 0,
6 o, p+ \! B9 L: B! N3 h: h( Q .gpio = DA850_USER_LED3,; V6 h* K0 B- z* I) B; \9 J
.name = "user_led3",7 `: U& Z. A( D& N
.default_trigger = "default-on",
/ F: E# t$ z3 w. D },
7 ~3 S1 t, g1 S0 U};
3 a1 A2 B# L2 a# J
" F7 A1 l, B& K! D, l1 istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) w8 q4 l N \: W .leds = da850_evm_tl_leds,. e; Q' }9 r) P" ?) _0 n1 v; g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),, S F0 t- e! V0 h
}; T9 e) p9 h6 X$ W4 `
# X: F7 w( c% n' B8 o
static void led_dev_release(struct device *dev)* o- ?$ f" ]1 q0 K% p- x
{
. M/ }: r# _; J2 c# O};
4 J4 l- c& R+ ]8 F O [6 U/ f# g7 A2 [3 L8 W
static struct platform_device da850_evm_tl_leds_device = {
- f9 g* h1 P( M5 _$ ]8 }+ M .name = "leds-gpio",
* S# T9 Q* R- A .id = 1,
- X/ z! O5 d# e' E, F7 Z, D .dev = {
g% p& [1 w( a+ ^ .platform_data = &da850_evm_tl_leds_pdata,
6 c" k/ `) s C& z .release = led_dev_release,
P. ^5 G# d- I" Z. o8 ? |/ |6 x8 g J }
. A \% p+ P1 e5 m};
/ {5 W- h" k# q, u! Z; I5 s- ?" Q2 Q/ D3 n4 O7 D
static int __init led_platform_init(void)
" j( y {5 `1 k6 x/ Q{ j: l, V# }, @1 p5 M3 k0 a
int ret;
7 J g ^: E$ x/ s: Y2 V' }#if 0( \ G: G0 Z; \
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 m/ o" {9 x$ ~/ Q0 u2 P8 N9 G" h
if (ret)" x9 b' p& y- _
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 L0 f- {; u' q' P& U, C( B "%d\n", ret);/ T' M, l- d; S+ H1 |! s- q( s
#endif) }4 |* F k8 @8 t
ret = platform_device_register(&da850_evm_tl_leds_device);8 {& V' R1 U4 Y1 Q+ L
if (ret) q( j. E( [0 [/ p# ?
pr_warning("Could not register som GPIO expander LEDS");3 f( X* A$ ~/ y' R8 j" F; J
else
" A2 G c* V: I. q5 `6 c+ a printk(KERN_INFO "LED register sucessful!\n");
2 O$ |8 z# @* j# ]/ Q% N- Z, }
$ t- V5 V7 x# z# |' W- ^, c5 f, r return ret;4 e) Y3 W+ t5 l' G
}
; k4 g4 \8 b2 Y7 y
& z4 @8 j4 E" |/ z0 Jstatic void __exit led_platform_exit(void)5 w7 t) j' E8 B
{; Y& Y5 Z; D5 |; N/ x$ q
platform_device_unregister(&da850_evm_tl_leds_device);
7 }. o6 ?; t) G' M8 P2 j1 D+ d. T( Z: e% Z" l U. z/ w( o
printk(KERN_INFO "LED unregister!\n");" z+ i0 V& V |4 g& @1 G! ^
}
) m K2 N) Y/ D& _6 P- s7 L" ]1 }% U
2 g. y0 U# q- U* ^module_init(led_platform_init);
' y6 ]) e, f, Z+ `module_exit(led_platform_exit);
- l5 W' X! W+ S/ w4 M9 @' d! i
2 a! v3 Y6 Z: Y6 |6 ^# T7 c- i, ~5 VMODULE_DESCRIPTION("Led platform driver");
- Z) ?! I0 C5 Q# u$ u$ F1 ]MODULE_AUTHOR("Tronlong");
1 q9 l5 k/ `8 K8 h. N( d# S" BMODULE_LICENSE("GPL");
6 z: D! W) Y9 e1 O. _. p5 }2 O4 b0 p; L2 a' s. ~4 M
|
|