|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, ^% _. b: U* z
#include <linux/init.h>1 E, z$ G& }. d4 Z2 n
#include <linux/module.h>. L. }1 L1 c$ W/ `
#include <linux/kernel.h>
9 x) { |4 b7 T3 |& j4 j#include <linux/types.h>
* T7 y( N3 k, k f#include <linux/gpio.h>
$ `6 c/ G( J1 q+ H) K#include <linux/leds.h>
' q! m) M/ G) o R. t#include <linux/platform_device.h>8 x0 W# Y; I" z3 x/ L% M
, s3 [" J: }& ?5 q3 \; @/ O
#include <asm/mach-types.h>, d8 N3 B8 O# F, A4 B7 _ a; T
#include <asm/mach/arch.h>
8 g7 I! g. O4 L; U e4 x#include <mach/da8xx.h>
, l7 W& f2 a: @7 O8 n; {#include <mach/mux.h>
; Q; C& D4 k% _6 @$ v5 ]/ h/ r' o7 N) [* [% U! {: q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ \ P+ I+ w( [: e1 _3 r7 i/ r2 Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 Z" K4 ^. D f7 M5 G#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 N' S7 X" r' c, \1 P#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! w: w3 z- F1 ]" o6 C
( n3 H8 C. P% F5 R% Q5 P/* assign the tl som board LED-GPIOs*/
0 C( L+ h$ W) h- L: u' hstatic const short da850_evm_tl_user_led_pins[] = {
* A. `( i) l, F5 S /* These pins are definition at <mach/mux.h> file */6 s/ S# z0 w/ Q+ K' a$ f* W
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 X8 |; N- e" T Y
-1
! G% J& q6 l+ v7 y, {. Q7 c}; o' H2 [* e) J
+ I+ s0 F+ K& |6 F) \static struct gpio_led da850_evm_tl_leds[] = { a. S" B& c, _9 Y
{. s8 ?4 l/ V8 n/ E$ Q3 P, z$ f. Y: ~
.active_low = 0,7 _$ ~( i: w" s: U/ U
.gpio = DA850_USER_LED0,
0 l& q3 e8 |" a$ A4 K .name = "user_led0",$ k/ p1 _( `1 {+ Q; g% U
.default_trigger = "default-on",; Z) K* L' n w, x& u
},
7 p! @, X) [6 t+ x {3 ^' B# A0 B3 p8 u# R3 m
.active_low = 0,
* e! \9 J/ Z5 C- j. [2 U+ Z .gpio = DA850_USER_LED1,
$ z# o' v7 R# D- U3 k2 X% D$ b \( X .name = "user_led1",: p9 ]5 F6 z( N8 A
.default_trigger = "default-on",' G. Z) x5 K# y7 U+ B% Q3 }$ L
}," J0 e! |4 c" E1 \ S
{0 a0 s' T4 h; b1 {
.active_low = 0,# x/ R: t' S& M+ H8 i% g
.gpio = DA850_USER_LED2,
- }- D% z, k" k3 L .name = "user_led2",
$ X- t, z$ _* x [. T8 g .default_trigger = "default-on",
7 \' |& N$ B$ i/ D },0 j/ O9 ]3 H$ N7 c
{
3 M$ y/ @. q& {6 k& }; d .active_low = 0,
7 v, G' V1 E* _ .gpio = DA850_USER_LED3,9 j Q3 |% q/ X, K6 h
.name = "user_led3",
, O( ?; D7 q1 v: `% G1 l& v .default_trigger = "default-on",
5 B% [( r" K, k3 p },8 f* ~. `6 n g; {6 ]" f, p8 ~
};5 K. ]" q) o5 o% ?
+ o; U* o# V h. i# u- r
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: z+ W. d! G5 P" C4 Z/ E2 p4 P& y .leds = da850_evm_tl_leds,+ i/ o! Y0 r- L- k+ V# [% f2 W4 a6 v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 ]1 @. c1 f9 Y' U4 e% H
};$ s q" s5 s n# o
# p8 D) j, ~1 Ostatic void led_dev_release(struct device *dev)
, I! W3 f1 A& v! J, T# Q{2 C1 k2 l: z8 w" ^
};
% [1 ]' T% m7 [' o7 |+ A5 g! R
+ e: y( w6 v8 Q! Qstatic struct platform_device da850_evm_tl_leds_device = {
/ K' d, h. _, } R: L7 Z5 j .name = "leds-gpio",
! T& A6 x% R+ R* v3 B( P .id = 1,
: O! O) @* Y* Y9 X8 f& c .dev = {/ w5 |: n D3 o" e. ], b* f
.platform_data = &da850_evm_tl_leds_pdata," n) d2 C- s1 V
.release = led_dev_release,
3 e5 Z* k& g: y; T( X. N }: W# ?9 Y3 @ v4 J- N
};' x0 L9 p# [8 q% j, @8 m
% M( ]7 G! }1 |$ N" [: astatic int __init led_platform_init(void)
1 @+ f% ^* V E7 b4 E1 a$ Y{
+ U0 R3 W& b& A' w& B7 N int ret;
$ j: q O! F- e7 c2 C7 V0 I4 o4 R#if 0
& K, |; ^3 J0 P' K, R ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) e* N2 v( X. ^8 D$ B/ l, X if (ret)
* W P2 Y+ I! F pr_warning("da850_evm_tl_leds_init : User LED mux failed :") R: \$ z0 b Y! {8 T! f1 b$ x! o% P
"%d\n", ret);' d; {% i1 Z. }+ r' [* @$ f
#endif$ r) F% h9 n/ J# T8 m: Q
ret = platform_device_register(&da850_evm_tl_leds_device);! Y+ B4 L, B6 k8 j# ]1 ^0 R+ R
if (ret)+ E+ a; P; h+ K, R- C
pr_warning("Could not register som GPIO expander LEDS");4 y: ~& ]2 ~' z* h
else
$ B7 k4 @8 v9 p/ |2 _ printk(KERN_INFO "LED register sucessful!\n");
1 _6 [2 ~4 D( M* t6 O
8 _( K7 {7 A/ f. u return ret;5 `$ d/ D0 I' r- l, f) V" Z F
}
) P. R) d6 \" X8 ^. T" \. Z5 M" j& c+ q' |7 ?
static void __exit led_platform_exit(void): P& I2 h1 M# }& C7 M) D- }
{
" B6 ]( o" Y5 S# t- C2 s4 ~6 X platform_device_unregister(&da850_evm_tl_leds_device);# Y! P( i$ ?* z X
6 k/ P/ K8 g b1 `- t N/ C1 H9 V printk(KERN_INFO "LED unregister!\n");
: e+ j y1 ]* y# m: c$ y}4 f! n4 L. D8 \* |, n- [4 [
( `$ U6 E6 T5 K' M
module_init(led_platform_init);
# j1 A% v/ g7 A6 C: P9 R2 z1 Cmodule_exit(led_platform_exit);
1 D8 f0 g, b: n- f! N& ?
/ F2 o& O U: ?MODULE_DESCRIPTION("Led platform driver");. P) ]; b/ s/ N5 T4 Y8 }
MODULE_AUTHOR("Tronlong");4 t5 a! B* { M9 i( u: |
MODULE_LICENSE("GPL");! O' u* F( Y5 w' h2 G% L4 Z# x( ]9 D( X9 m
* y/ c5 {5 z- t6 o$ {: Z7 Z4 q/ ^
|
|