|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( h/ U: T- U, d/ j#include <linux/init.h>
( P1 G7 z. {6 R, |( T#include <linux/module.h>) `9 l: v4 q: Q7 X+ _3 a. o% q
#include <linux/kernel.h>
) Y$ S0 V) A$ ?8 _1 s8 t$ b#include <linux/types.h>$ T, p# t+ o( Q- T6 K2 T1 p
#include <linux/gpio.h>. Q0 h/ h d" f$ W
#include <linux/leds.h>7 }# ~* T1 r' y7 p4 v# n. D' u Q
#include <linux/platform_device.h>
5 C" X" P* Z' N+ V6 x# w; x m' ]: A) Q" D
#include <asm/mach-types.h>8 ^6 z* x4 ^ Q5 p) ~$ t
#include <asm/mach/arch.h>1 D0 M2 ?2 U" x" k
#include <mach/da8xx.h>% h! j% A& ~; J* u
#include <mach/mux.h>
' R7 C# l: v, ~6 d* ?- g
9 a6 O5 s" N' v$ d$ Z3 T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) z% Z* V2 }# ` v#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): S9 k! C4 X5 L" ]3 G
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 r. P( Y8 d' L& d1 H#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% [) j% @! y/ l* b
3 x& f4 a, l! W9 z* b/* assign the tl som board LED-GPIOs*/( Q. T8 S/ N5 R$ V' }+ D1 J
static const short da850_evm_tl_user_led_pins[] = {
6 S% _& v! j+ L6 A /* These pins are definition at <mach/mux.h> file */
- k8 u" a9 u; a% [. A. k0 U/ o3 W) m DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ b3 C( M) @7 A
-1; F: C* a8 W9 \. a( ]
};
/ [- D& l, _- }6 I$ K' T+ U% H3 U" {
4 Y) t1 c' ?% o- g' jstatic struct gpio_led da850_evm_tl_leds[] = {
. n1 g. @6 D9 B3 a {
- Q- V# V j' P3 P, Z: l+ O1 H# a .active_low = 0,. j W& c' a; G5 m2 e( ~. _
.gpio = DA850_USER_LED0,
) ^1 H0 U1 J# Q& ^ .name = "user_led0",+ R' E C1 `( L/ D* T0 M2 H
.default_trigger = "default-on",9 y) I8 H+ h0 Q7 H" V) }: g- X# Z
},1 f8 u2 R4 G; L
{ l4 R! r4 e) H! P6 l
.active_low = 0,8 p) i% H$ l2 j; r, f& [
.gpio = DA850_USER_LED1, M) F4 E$ ^% F# p" H) O8 s
.name = "user_led1",
/ U. U! Q* i9 M7 b0 V1 n. i3 _0 v% t .default_trigger = "default-on", K$ s0 H" P) H( J
},: t! i- J4 n0 `7 ?* Z
{# d0 M5 w8 |# {: n( Q8 A) W
.active_low = 0,
1 J2 k5 k5 V7 W. r .gpio = DA850_USER_LED2,5 R! v! x9 W+ o7 H3 C# I
.name = "user_led2",
# \9 t9 J6 H$ `6 Z8 e4 M7 r/ E; @ .default_trigger = "default-on",$ I) E" u: A8 g
},
8 f1 V% U; h! M' [ {
% I! \& d5 c* g8 _7 u$ U" c .active_low = 0,: \- A L! c8 C8 D' O0 L3 x! C3 J
.gpio = DA850_USER_LED3,
7 w) j! Y1 |* v( B* ^: H# v& f .name = "user_led3",: T! Q2 d+ w% m: y4 ^9 r+ h& N# O
.default_trigger = "default-on",
& t, k8 B2 S" m0 { },, |0 c y9 H* I; y
};# k" q J# O' G7 N$ v* G+ H' D
8 Y' A) R$ ~! c! o; }# m) w0 u0 L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ `0 N' v3 a9 S1 z n& b& v
.leds = da850_evm_tl_leds,
1 A5 G1 Y6 r" ~( w .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) g/ A. h p5 ~+ @" |};6 a K2 R% r: o0 t# s6 D' A
" ^4 t) d, N: ?) C
static void led_dev_release(struct device *dev) Y/ ]1 D! ~" a! R$ h% g
{
, w# i; P6 i* q6 a) g8 r, d, A7 {5 m0 V};+ g- z, E5 I6 I( b% `1 ~. v
- ?7 j$ K: b! l9 L0 y! X1 N
static struct platform_device da850_evm_tl_leds_device = { A6 P# D: A% c% l1 O' |
.name = "leds-gpio",/ q* A6 d ?' @
.id = 1,. }1 u0 @* V1 U
.dev = {: j9 O- a8 _$ _* Y0 Y! Y0 H0 }
.platform_data = &da850_evm_tl_leds_pdata,
7 Q) _$ u. ^* j, o$ W .release = led_dev_release, u) i K# {- O
}' p- `' S$ S# `: V, V
};6 e& a+ d' s. H0 q" d- V' E- ]& u; q
: R$ N# E& @9 v) v7 j3 A
static int __init led_platform_init(void)' z5 d4 W" Q9 T% v( j1 c. y; [8 z
{, K, U# U3 O: k; A. c) }1 j' ^& ~2 ^3 P
int ret;
; k: Q7 f5 A2 O#if 0
7 n, }1 e P- Q3 r* v- \. a1 ]$ o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ s, c1 e: V/ t- m if (ret)" H% K$ U; B3 x0 n( x: m# R- D
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 F& }3 e0 N) ~. T) l4 ^
"%d\n", ret);
b- S$ ~$ g) {0 Y' a#endif
4 G7 \1 n3 S$ i5 o; b( j4 N2 A ret = platform_device_register(&da850_evm_tl_leds_device);
0 h0 I5 G/ W! R) P. P c [ if (ret)
3 A% U# |% W2 T; X1 w6 {2 t4 [# v pr_warning("Could not register som GPIO expander LEDS");& `0 J: k) H3 x$ t) ]% @: t: X
else, }1 U* R! e' F
printk(KERN_INFO "LED register sucessful!\n");4 ^' \* u2 x3 g; e
% s6 U! |! V% F& i% p return ret;! e3 w! f# u5 v7 A
}, Z: {! w: G( t% [+ L
% H8 M" P4 b" }) W5 U$ c
static void __exit led_platform_exit(void)
0 ^8 W+ c5 ^( y+ A$ i; O3 P* z{
0 d! ~6 N9 V! y/ e- F) B0 X, T% @ platform_device_unregister(&da850_evm_tl_leds_device);
$ [) u" g8 h' u/ J; K7 g- N5 S$ S: p
, L( {) b- F: g& ?5 s4 ^) ^ E printk(KERN_INFO "LED unregister!\n");% Z# I7 u7 U4 {9 H7 |; {
}& R3 S+ X; N" u1 J$ t
' P) d% C& X: i% @. w7 kmodule_init(led_platform_init);
) T% e7 v' L! B5 X1 W# x- B( hmodule_exit(led_platform_exit);$ B9 X S" K7 [: ]3 l
g6 u7 m O/ F0 j8 U0 f0 P* s
MODULE_DESCRIPTION("Led platform driver");1 O. p' [7 ]" y/ z" ~3 d B! m4 a
MODULE_AUTHOR("Tronlong");
$ A1 ?6 w& h' W3 eMODULE_LICENSE("GPL");4 B7 g5 Z+ T3 m6 V. A5 N5 |* P# G
3 \7 Z9 e6 m5 z: Q, o; a$ }
|
|