|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' X/ @* O" L) i& |, K
#include <linux/init.h>, }% s: t V8 ?$ W" K6 \
#include <linux/module.h>
( S% e. n) w7 K#include <linux/kernel.h>
* |7 j3 }' } p( ]% q4 M! X) Z1 b! R#include <linux/types.h>
4 F$ A2 {, y& z0 g6 A#include <linux/gpio.h>$ R2 G/ R# _+ t7 F
#include <linux/leds.h>2 b& M3 d9 o t; ~3 @7 D
#include <linux/platform_device.h>
" l" X @$ ]5 E! E1 K4 A9 u! _2 N# I7 |7 ]% W
#include <asm/mach-types.h>
) Z) F- k k9 U- u2 ^) W& M#include <asm/mach/arch.h>' w, r; @! Y, b$ w
#include <mach/da8xx.h>
1 {4 S# w1 C9 s/ O0 ^$ s1 t#include <mach/mux.h># z- k! U& } i1 Y" Y8 B- Z, C
$ d- J/ }3 H' U
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, Z4 h- U1 a4 m#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( z. F6 v$ B# Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! D6 C, r" D6 |6 Z) g
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); u% R1 h. s# p" o; t
2 p& V7 ? a0 o8 A. k/* assign the tl som board LED-GPIOs*/6 M! q- ~; C6 p0 }1 v
static const short da850_evm_tl_user_led_pins[] = {
4 @6 W8 k' x) q2 _ /* These pins are definition at <mach/mux.h> file */
5 p! m9 o% d" E. W DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 l/ e, ~0 r4 I/ X7 ^3 y! ~% s' _
-14 P4 {. [$ W$ s3 |
};
5 ^" H B: W! c( h1 o+ V
8 ?3 ]( P/ T/ x# i: |$ x% |static struct gpio_led da850_evm_tl_leds[] = {( Q3 Q2 \6 s z; s. p+ q# S" }
{
1 p& g4 G& Z" ~, [' R .active_low = 0,
3 e* o T/ P! `$ W, M& N .gpio = DA850_USER_LED0,
' a' B3 i$ q6 z' s9 F1 J5 X# k; v3 I .name = "user_led0",/ R1 n8 H3 L+ q5 e
.default_trigger = "default-on",
; q( I, O8 }' Z( C2 H3 r+ x, i },
# k# H4 b' ~2 ~' a5 P {
( u) R6 e1 t- ]& N/ G$ w0 K: ] .active_low = 0,
- p( d0 C3 h0 G! z$ | .gpio = DA850_USER_LED1,9 |. y' Q" Z5 w* c
.name = "user_led1",$ ^& X4 N+ l S
.default_trigger = "default-on",
' _& _" ~ h7 x9 a/ f) N! B },
8 K3 j+ u4 H! [& @# u {" r* _% @% \! [8 C* R1 e
.active_low = 0,% G6 o1 Z. w7 h
.gpio = DA850_USER_LED2,
; @ A; n9 p/ @ .name = "user_led2",
6 L9 j, [# R) U7 R }% R/ G .default_trigger = "default-on",
; W9 p9 H3 e( A. i6 x! ?" N* T% ] },9 I/ K9 I, C' Q8 \( _' H9 j
{" b. Q" l4 N! k X. J" `5 P7 A; f
.active_low = 0,- ?7 i# Z+ b ~1 m" D- `
.gpio = DA850_USER_LED3,+ G5 a& n, H. D+ P+ s o
.name = "user_led3",6 k: t+ Q2 K+ H* [/ Q& S6 C
.default_trigger = "default-on",( W# U" G3 n! N
},
2 |" {6 g. P. Q: M% T/ `};! n+ k3 K7 |+ a# v% b9 b- G* l2 U% L
' Z. x0 | m$ z7 i, ]: W' h
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 f% Z! v; y& e; |
.leds = da850_evm_tl_leds,3 V0 c$ H( j1 v# c- @/ ?2 ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 v/ c+ u( B5 I+ R, V2 j; @/ ^- x# {
};
( J8 B }8 V4 J" j' R( [( U: X4 L6 s% S* U4 @" @4 a0 k5 [/ W. c
static void led_dev_release(struct device *dev)
5 F0 [3 X1 y6 X) x{" h% ~/ Y! ]& Z( [! G% X
};" _% }5 D e0 I5 l3 ~; l' y1 O
, l) T- S; A: f# C! d& N' ^
static struct platform_device da850_evm_tl_leds_device = {
3 G* m$ C1 a+ D" l y5 d! U( |/ I+ }# _ .name = "leds-gpio",
. Y+ w& v/ F3 ~# ` .id = 1,
! t7 J+ r) r& l# S .dev = {% @/ u/ ~1 m( y+ T$ J
.platform_data = &da850_evm_tl_leds_pdata,
* \( U) p( ~2 a7 F7 e% f% p .release = led_dev_release,
. E- z4 |2 |' c# x }
/ x9 @) D0 }1 W( \/ K! I) h};8 V' N( v7 w; R* N. i; p0 k
, s4 i9 G( ?1 Q) V A
static int __init led_platform_init(void)" V: G- i V8 @0 P' G6 W9 j
{5 G3 P' X; }# n, O) T* K
int ret;; f+ a7 t2 `* c" |' n) h% v3 t
#if 05 e; z% ~) }5 p5 X; V; x' w7 _
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" h$ u; _5 y0 u) s3 p( Z
if (ret)
4 {0 A% F5 D; T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: K; v/ d# S6 d B) B; ` "%d\n", ret);7 o/ `" k# A; O- u, s& `
#endif* Y9 ^4 H0 W4 X4 h) o; B
ret = platform_device_register(&da850_evm_tl_leds_device);! y( D$ c& |0 r% {% {3 q
if (ret)6 t) W8 ~: \7 z& z2 e. L6 t3 D
pr_warning("Could not register som GPIO expander LEDS");
0 v* q3 c& }; Z! ^, Z else$ l1 |! g; {) c8 u) o5 s3 F9 w3 {
printk(KERN_INFO "LED register sucessful!\n");
& {7 Q! I3 M' F# T
- m1 r) ]2 `8 p4 Z return ret;! P7 e! c0 v' ^- W
}1 k% p9 n; e8 p' t4 B
0 |# p7 ^% @9 S+ u+ _& x* o+ w: e
static void __exit led_platform_exit(void)1 \; S; L- v# H, g' K9 H+ D
{
7 c: C9 ~1 h3 y platform_device_unregister(&da850_evm_tl_leds_device);
6 X m9 ^+ f2 W% T* C* s5 b4 b: k
, w# C. f& B( ]; z& s) O8 l$ ^ printk(KERN_INFO "LED unregister!\n");
$ _! R3 R* R v) Q; @% g; L% y/ @}$ v. ^2 Q4 `/ x! s5 w6 M0 }5 x G
/ N) ?3 L2 b& q& L6 kmodule_init(led_platform_init);
{# l# [; J+ t) A1 omodule_exit(led_platform_exit);% |8 v: o9 e. q
1 D2 U5 a; W- ^5 M+ a/ Z
MODULE_DESCRIPTION("Led platform driver");
' D5 F$ g f" I7 p* l. mMODULE_AUTHOR("Tronlong");/ S' K1 s- ?& l& h0 }
MODULE_LICENSE("GPL");
7 `" ?- v1 l/ b, a6 y3 t, K6 F+ P
, {. j* q, v+ ^" T, @; [. Y |
|