|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% @; l3 B$ w' @2 T+ D6 i#include <linux/init.h>
! `/ v& ^; n0 X- s3 M) k#include <linux/module.h>
& N1 Y; m3 i0 m ~+ @5 |+ I#include <linux/kernel.h>
; ~& U. o! F3 G, K9 m#include <linux/types.h>4 F: T# Z3 c( _# D, T. m
#include <linux/gpio.h>
- ^! q; G& M- X#include <linux/leds.h>/ r" u4 M' r. R8 n" p$ Y3 u
#include <linux/platform_device.h>8 H; M+ W; q8 y. G+ J/ m9 @
! X, f8 h. z2 _) J: [
#include <asm/mach-types.h>
" v, I P: Z9 [3 |#include <asm/mach/arch.h>
$ t0 ^9 j z& n' P: Y#include <mach/da8xx.h>
( }* Z& }. P: g+ I#include <mach/mux.h>' y2 ~" n/ i- x0 _1 F8 ^; e/ m+ A
# v M- `9 |2 H# @. d0 m" U#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! m& m! Q3 R5 u4 U( s2 _3 i! [" W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 g5 F% F7 f* L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- e- m- C8 E3 T; o* Q: }. A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 A2 y/ x& g5 b8 p" o
2 x1 V A6 c" Z/* assign the tl som board LED-GPIOs*/
+ U6 W g: U1 ?static const short da850_evm_tl_user_led_pins[] = {
# U/ R; K s9 E' E- ]* e /* These pins are definition at <mach/mux.h> file */$ Q8 `& P: F& @% S0 C
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- R$ ?, X- Q! k
-1
# H' M O9 e: l( @, c% j};/ i: d0 G7 o0 h1 U5 _ s# u
8 y: y- N. n4 t- T! M: M& [
static struct gpio_led da850_evm_tl_leds[] = { @3 P: d# y0 D+ \* x9 ]! z
{
# f" a8 m$ ?8 j+ q* {* x4 k .active_low = 0,# o `& s2 e8 l+ i
.gpio = DA850_USER_LED0,9 }: A) r( K i- m
.name = "user_led0",
/ t6 u+ P* B6 E6 \& t- C. J .default_trigger = "default-on",. h7 K& Y. N9 q2 s
},
6 C* Z6 `; R: p( N A3 S {
8 Z. Z- Y! y l* q- B .active_low = 0,
7 c! N6 n9 t/ a! R0 A .gpio = DA850_USER_LED1,
6 ~* v% u- v9 O2 k3 F" c .name = "user_led1",
' w8 s% i% ]9 D# E" _4 T) ^ .default_trigger = "default-on",+ O( N: c, P8 x
},, g6 ^! G# N5 K0 p$ b" \
{
+ G2 o4 O4 a0 o4 A& ~' ^. U( q3 _* X3 X .active_low = 0,
' T o) c5 I8 b3 h .gpio = DA850_USER_LED2,
. w# J# b$ w) _/ }& c V .name = "user_led2",
2 s' B# H* n: R1 ?# F$ x& s2 c, _ .default_trigger = "default-on",: ^+ ~" g4 P7 i$ i9 H
},0 [" Q3 \4 v; @5 h3 N3 D
{/ W+ F( {8 f1 h/ q# z n) |" r
.active_low = 0,
5 P$ b( e8 h1 R/ e, w .gpio = DA850_USER_LED3,
% s* o2 p* t3 i( `2 Z w* c .name = "user_led3",
" _; p% o& N, O. X4 L# j .default_trigger = "default-on",
# M0 w% H( R; c% [ },
: s' `( Y2 c$ @6 e( Z% `. p};4 O6 G% H% H- }
4 n& @! E! h/ y6 p# q0 T; }
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ t3 O/ K& p9 B3 U; J9 n9 l3 H
.leds = da850_evm_tl_leds,
3 S" r9 D3 M# u' W, } .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 R! F. i7 m, N" W/ a
};# `7 G8 \5 G! O( y
# ~ Q( @2 K' T' Q9 A9 J8 x! N
static void led_dev_release(struct device *dev)
( P% b/ M) M2 D{
$ U e+ a$ ?1 J, e7 f, e};4 x6 N1 _1 F5 [* n g
6 `4 X9 I3 z7 | @
static struct platform_device da850_evm_tl_leds_device = {
& P# s0 N, h5 w! M .name = "leds-gpio",
0 j7 V" ~0 H0 q .id = 1,! `8 p! P2 g' Q
.dev = {# F* {) C t6 [
.platform_data = &da850_evm_tl_leds_pdata,3 Y' ?% K0 b- [; T0 A" {# L" `
.release = led_dev_release,$ u8 @4 @* z( \) Z
}, n, K& ^6 z: Z1 O$ G B( F
};
. K% r: I" L3 q# F/ [. H/ u& l: c- \! [, h% d3 L I
static int __init led_platform_init(void)
9 G7 v# @, h; Y$ q p: R, L9 ?{. [; J$ }5 R- i' t/ @" ]
int ret;
& Z6 d* m `+ w2 S( _5 T1 D#if 0
1 m+ S7 E% |7 |) [" b9 a+ r; } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, }6 J. H5 g4 b5 j
if (ret)
5 R3 Y* F% u/ b1 U6 y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ b+ M/ q0 e& Y2 ?0 c* r "%d\n", ret);0 l/ _) M9 D, z" ^$ A' y: z. W
#endif
0 W6 Y$ ]2 s, B+ Z; H: s& Q4 k) K: \ ret = platform_device_register(&da850_evm_tl_leds_device);1 D, j6 }3 j3 R0 N9 W8 P# s5 a
if (ret)
; R4 L6 P- c0 d pr_warning("Could not register som GPIO expander LEDS");
5 c `6 A3 [# u. { else2 K+ n- q$ j6 d
printk(KERN_INFO "LED register sucessful!\n");5 i1 n: Y- A5 e; [6 c( C
, g% y+ D) u6 T+ ]( G( F- @ return ret;
" ^6 C! [' r) P- H& v# L% g}5 ]% Z; g- ]* E; V7 V
7 a1 u. X4 m/ U: `. \$ p# wstatic void __exit led_platform_exit(void)
l: W% |. ^0 }) ^4 m. g$ M+ a{3 ]- M2 o# p6 k4 b6 N; f! e* d
platform_device_unregister(&da850_evm_tl_leds_device);: j5 y: b* e% b8 H( l: u2 X3 Y: L1 B
$ f8 d$ X8 g7 G: U. _( c- u* G
printk(KERN_INFO "LED unregister!\n");$ P4 f. i2 e. ]3 Z- C
}: D2 P# ]/ f- G" g9 E+ O0 F9 N
2 i# Q# {0 W3 L, `8 S8 v
module_init(led_platform_init);( p- | o, K7 X4 s/ P9 C
module_exit(led_platform_exit);
! Z2 E( P7 h" P6 f8 p7 I2 |. |2 a8 _4 u
MODULE_DESCRIPTION("Led platform driver");4 D, {4 U+ n) H
MODULE_AUTHOR("Tronlong");
9 _3 Q( P2 y5 h# g7 jMODULE_LICENSE("GPL");; |9 N% U! f- A/ n# \+ i
. }9 J% M6 H0 v# a8 F' g7 ^ |
|