|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 P8 j: n. z' `2 z#include <linux/init.h>
2 ]* {5 [& s' d1 m4 d#include <linux/module.h>$ d/ {( ?" ]) O a
#include <linux/kernel.h>
2 W$ z) c, \% O* m' N! X- a% L#include <linux/types.h>
1 G k8 ?$ i' G* n0 o, h! d7 G/ q#include <linux/gpio.h>; I6 B' D3 E- n# v# Z7 X4 [4 P
#include <linux/leds.h>3 c- Z( v" @- ~
#include <linux/platform_device.h>+ N3 |# x( V( J% g+ C
1 G, t2 @3 T& n* O- C#include <asm/mach-types.h>& i: T9 S% e4 T* `9 H- E2 ~/ B
#include <asm/mach/arch.h> C6 {& @2 [9 o
#include <mach/da8xx.h>4 T* a+ O: l, n5 z( @; {0 \
#include <mach/mux.h>
: z) d4 Z' _# _- o4 z
+ k) h: M$ S9 e#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ N+ R' j+ Q6 E$ |; [1 W#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, f6 m. G% V5 [5 ^1 J- T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 w. c7 r, [; f' P4 f
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 [& c0 r! j8 E7 S( L: j
3 z, X, f: H" a/* assign the tl som board LED-GPIOs*/
\! b. E% O( c$ \0 Q, hstatic const short da850_evm_tl_user_led_pins[] = {' i8 Q, y: @# {* _- U
/* These pins are definition at <mach/mux.h> file */
9 w! }2 b3 T# `0 u7 r" _: u3 C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: p4 H+ V0 Z$ K4 Z, v* j! J% M
-1
* _6 X6 K: [4 I+ s; `};$ L& {3 q/ d# i$ O. z, v( C$ c
( L) i+ o4 I' o7 N; b# `* f; astatic struct gpio_led da850_evm_tl_leds[] = {
3 F( W q5 i( Y. V; W- N" \ L {
! w/ \ N2 e5 A$ K! ] .active_low = 0,
% L/ Y7 p/ V& N1 e* z2 z .gpio = DA850_USER_LED0,# {& Y) m' g+ t) f1 h
.name = "user_led0", g2 |) p ?9 h$ D
.default_trigger = "default-on",; @+ L7 T* \5 S3 }) L
},
8 [ P" V* ~# ^. Z( y+ f; @ {9 K0 W! i: A- F( V, s& C, Y N
.active_low = 0,; v6 D$ U, R$ Z& V
.gpio = DA850_USER_LED1,
/ `2 e6 H- R9 ^ .name = "user_led1",) i- S& Q* a6 r
.default_trigger = "default-on",
; Q, u8 U) L; }$ C },7 s. e0 z/ |7 R
{
; y/ r3 B0 v1 w ]& Q' O .active_low = 0,/ {3 a9 w! m3 l5 E
.gpio = DA850_USER_LED2,
6 [* A# A1 D8 m$ o1 c# c .name = "user_led2",+ [. h U* v# s+ U) V
.default_trigger = "default-on",
/ I) ^; Y+ j; j8 U6 k6 u },9 _0 p1 K9 _+ h4 S
{- |' B, j, e+ e1 V1 a" B
.active_low = 0,
9 x: v' d Y; V) d .gpio = DA850_USER_LED3,+ |% ~* M/ m: W6 I9 _
.name = "user_led3",, \1 E9 f- Z0 L: f* E* W" o
.default_trigger = "default-on",
; C9 ~% A+ b5 G" Z },1 x, |4 H* y" Y3 w f
};
0 ]$ \5 w; u! Y8 r, P
1 j9 n% `. i1 w ~9 Y, `- n/ Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. Y7 g& C1 _2 p e* I. Z .leds = da850_evm_tl_leds,
$ H4 ~2 E' U! i B- y1 x- K: D* c .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: F t' u" X/ o+ U: v, c; p: i! m
};
" j8 D) `0 x* o/ ]7 ?# j8 ^. x
& Z: z# X) v2 a- W0 T# @! bstatic void led_dev_release(struct device *dev)
; o7 t2 ?" _8 A0 e, j8 B8 b{
3 V/ j1 g! _, c! i* Q};
: [1 }9 Y$ B7 f7 j4 l0 ? A) \# J, l' T# C' K+ z( v+ c6 p- D
static struct platform_device da850_evm_tl_leds_device = {
7 a0 K* Y" H3 q' p .name = "leds-gpio",# ^4 z* t- ^) o: C0 B2 u( D
.id = 1,/ m) T5 _' H F N
.dev = {
! W6 v1 G- q# d/ |# a' z .platform_data = &da850_evm_tl_leds_pdata,
: @0 s$ a# T* z .release = led_dev_release,
% K3 j: p& ]: N9 i9 c4 B, n; L# b }4 ?3 j; t0 L& P% r
};
" S( r7 {) c0 v# y4 Q
$ q6 q O2 J/ E+ d8 b& Qstatic int __init led_platform_init(void)7 S8 _' b) F' E ?" o1 y2 }
{( i1 N+ Z1 X e0 p0 n- n% }/ ]
int ret;
% A' d" g0 R2 @" V4 R3 s+ J- {#if 0
4 K w* o" R# ~ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ K" @. V" P$ d. y: U5 E' b
if (ret). b0 c# b5 `; M. g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" W3 G ?% j2 B+ S' M9 Z
"%d\n", ret);, W# ^( T. n L8 s! W1 N# i
#endif
7 `- A( g: o. \- A# d ret = platform_device_register(&da850_evm_tl_leds_device);6 m. t+ @; l& u; X. A
if (ret)0 b% ] M, G/ u8 S
pr_warning("Could not register som GPIO expander LEDS");
4 g0 J2 Q% y: e2 ~ x5 Y1 [* } else
5 y/ P, \# N. Y) u6 w- u- E printk(KERN_INFO "LED register sucessful!\n");% V. T' [, @- s8 }4 `2 X
6 \7 G: b1 z7 C9 I return ret;
5 u4 G/ m# B6 h% j$ h9 O& E/ @+ I}
5 R) E. N% R% R/ d: Y1 Y- s7 R* V' n+ G8 f; M, h
static void __exit led_platform_exit(void)
( m4 E) s6 a$ Y% o' i( O% W7 A{
2 @/ S( \2 m: \! ?: U platform_device_unregister(&da850_evm_tl_leds_device);
4 o2 V1 \* X% N: f5 ]1 w5 z5 w3 U/ M6 [# J- p" t2 `
printk(KERN_INFO "LED unregister!\n");3 s' z. U/ M% M+ Z
}7 V# h$ h: ^0 j* T9 T8 j4 T. X
& m$ W& X) T4 ]1 n/ U( R$ B* jmodule_init(led_platform_init);
9 i/ a# j# i5 {! mmodule_exit(led_platform_exit);) V& T$ e% `! G/ t1 v2 p
: A- d- v9 y8 ]1 ~" ?1 c# lMODULE_DESCRIPTION("Led platform driver");1 t% g: X, h& @! [
MODULE_AUTHOR("Tronlong");: y# ?$ y4 y+ v, ]$ L% x* p; l6 t9 ^
MODULE_LICENSE("GPL");7 \, r% W0 {+ ~' W+ V
& G+ w* \$ J. e
|
|