|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 B `$ U: E& Z7 u8 `* a6 p
#include <linux/init.h>
; e, j! y- o0 u. q#include <linux/module.h>$ U/ `, _/ v; ~4 K% g) j( M
#include <linux/kernel.h>
6 _8 H( I. P9 y! c3 Q& q& M#include <linux/types.h>2 T# H- x/ K- h+ @
#include <linux/gpio.h>9 b8 a/ p8 K) e* h
#include <linux/leds.h>
?% T; t% w: u1 W) \! E#include <linux/platform_device.h># `" n7 P6 Q' ?) {/ X
A& u1 d* W* y# [/ J
#include <asm/mach-types.h>3 @, F$ G8 z$ ~
#include <asm/mach/arch.h>% Y3 g5 @% u, v# i% Q
#include <mach/da8xx.h>
& Z: A+ ~# J9 V) @#include <mach/mux.h>5 R; h0 N' |, w; N/ O
. @% o X- X9 [
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, P6 u9 `/ Z2 d* d2 f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& ^" s' U0 |8 S. q& `5 h#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 }7 q1 Q* d5 ~0 a9 ^2 c- Q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 q3 B2 N5 @5 L' m0 w
/ ?4 ^- q0 q$ u7 @ U# y& }
/* assign the tl som board LED-GPIOs*/
M8 P8 j8 [: H [' S2 U lstatic const short da850_evm_tl_user_led_pins[] = {
$ i. C& W$ d, l$ \6 Y/ q /* These pins are definition at <mach/mux.h> file */# H; a" U/ X7 Y3 L1 X# W/ Z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 q* C9 X! a% D& V4 J @
-1% S0 B( i2 e& q
};
' V7 ]4 {- y# U8 y# @4 q3 v! j$ \$ e8 u# Q* d" o
static struct gpio_led da850_evm_tl_leds[] = {
& g) c8 {3 a5 |" g2 q {
7 e& l0 ]: x2 w/ @: A' G! d .active_low = 0,
1 f3 ^' ~0 i& V! s .gpio = DA850_USER_LED0,5 g6 b7 E8 b) x4 E3 j
.name = "user_led0",
* F$ L, r' b, y8 O" N; o' M; Q .default_trigger = "default-on",+ k" w5 g3 T" [/ Q$ U# P
},3 w, Y9 P3 F0 I# U# X* t0 C
{1 R6 _4 d) L; S
.active_low = 0,
9 F& ?+ D9 l/ E, | N .gpio = DA850_USER_LED1,
7 ^2 b9 T) ?8 J( v7 a2 Y .name = "user_led1", H# r. [* u$ u& m0 @) v4 H
.default_trigger = "default-on",
4 Z( |; j. U% X },
# d! ]3 w/ e5 G, O6 x& n& d7 R {: `) ^( {1 y+ Z6 c$ k ~% m0 [
.active_low = 0,2 v8 E+ ?+ V- N9 G/ ]% ~
.gpio = DA850_USER_LED2,6 Y2 I" R- l& Y6 i+ D# e6 n
.name = "user_led2",
' U) V6 V3 d- X7 S( A .default_trigger = "default-on",, r4 O$ [; X; L# F. R7 X8 q" ]6 m9 @
}, r7 T) n+ D e+ f
{
1 P* O v a+ K$ ?6 _ .active_low = 0,: L% s* K! f. q! x$ S8 \
.gpio = DA850_USER_LED3, i+ x) [9 C- D; |6 P& \" ~8 @3 W2 L
.name = "user_led3",
. e+ R. C2 U2 @8 W+ ?0 r .default_trigger = "default-on",
& K, e% V4 w6 E- [, }# ], R( p },
7 ~0 x E8 n0 h$ Y( Z};; r. N, u8 C2 k/ E
- k( j: D$ d5 h1 g0 h8 a) T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ j! f+ p! V. a2 J .leds = da850_evm_tl_leds,4 b8 d+ ~; N, i4 y' q- ^ T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 B" p2 |' S: u: J' G
};% S" D @7 Z/ d% k: u( g
' s1 p' t& W4 w+ p5 }5 O9 \static void led_dev_release(struct device *dev)
r6 @& d! n: z9 S. A {{
7 i- w; @# x: T/ [% {$ A" a6 |3 }2 G1 j};$ ^7 e, A) s- _5 Y" j) B' R$ g
& {$ b M2 e) {. y
static struct platform_device da850_evm_tl_leds_device = {
5 `. x% I& c5 z+ C7 ^( p( Q .name = "leds-gpio",
. R. L6 R$ O6 A- a .id = 1,
; J! S5 N: P1 U( f: \" u$ @ .dev = {
" k" ~1 P2 {! F8 `9 J% B2 d( ^1 L% U$ B .platform_data = &da850_evm_tl_leds_pdata,
/ L; W, K6 t. b' F .release = led_dev_release, q: K& `; h1 Y) j% s- z. ^! z. L
}
A2 W2 D+ b. H* Y, |};" M( y: q9 i& N3 r# v
. b' L W9 |" C9 `3 w3 m% \
static int __init led_platform_init(void)1 Z7 g7 x. G4 I
{
, f$ v5 P" \6 l int ret;
4 K! C" p @' c, q+ p& i#if 0
! R. [, |# j! B: S/ ^" H ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' d- p5 w2 y; L- b/ m) u
if (ret)
9 `7 A9 g: z7 |0 ?+ T+ d8 i pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 P A6 @% ^/ N o* k
"%d\n", ret);9 U6 R* K9 G' S$ M% }
#endif
- u! j" K! s; n8 L ret = platform_device_register(&da850_evm_tl_leds_device);) z( Y. z5 I- j
if (ret)
# }7 m$ q; [1 S" E1 \+ A; I$ D pr_warning("Could not register som GPIO expander LEDS");' _% I# l" G& Z9 Y! b
else! i& p7 ~- |4 v% ^7 w) R
printk(KERN_INFO "LED register sucessful!\n");
5 {4 ^7 b, V* u& J- D5 ?, K2 R2 R: D2 c' P* c$ e3 f
return ret;& |1 r! ]; t; P) v8 Z; n
}$ l: J8 b) Q5 S2 ^
5 ^: _7 C2 W0 @! m k* R! `static void __exit led_platform_exit(void)
1 S' ^) B0 n( z# V! C+ V, g{
/ W: U$ }! T: Q4 r. W platform_device_unregister(&da850_evm_tl_leds_device);$ R- Q: `7 s0 x- ?
! B: y$ i# ]" I( P3 t
printk(KERN_INFO "LED unregister!\n");/ v, x y) z/ ^5 _* R
}1 I h- Z; q; o0 s1 a" _! z. S
1 Q) Y7 O+ H: m6 p: z; Vmodule_init(led_platform_init);3 J ?2 J( ^! V8 p
module_exit(led_platform_exit);
. }: J/ M' a1 \) k* O H" @0 Z4 e% x L+ d/ S
MODULE_DESCRIPTION("Led platform driver");
2 v. f7 `" @$ [* {* LMODULE_AUTHOR("Tronlong");4 ?! W8 g* x1 i7 p: \; z" a
MODULE_LICENSE("GPL");4 X* h, m' X5 ? u, g* n
6 q1 R4 w1 }! e" O* g- M! t
|
|