|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. ?5 ]7 F" P4 K" t2 ], ^
#include <linux/init.h>: m; w/ n- L( C& W% c" a# f
#include <linux/module.h>
4 p+ F( ^" R7 R) v! I7 T7 i#include <linux/kernel.h>
+ j1 k6 [+ N, `8 a8 K+ Q1 U#include <linux/types.h>8 w6 h$ E2 j$ L
#include <linux/gpio.h>
9 R7 p+ @! x! X: N#include <linux/leds.h>- R p2 i/ P; X) ]3 Z5 z& s& N
#include <linux/platform_device.h>6 j/ }5 g" V W3 p4 f- ?
# n; Q8 `+ O9 G
#include <asm/mach-types.h>& d# ?7 s2 E9 |0 N2 i( i! F
#include <asm/mach/arch.h>
: }6 k0 C! n: b#include <mach/da8xx.h>
9 W. F% c6 Z+ Y) V8 ?#include <mach/mux.h>
( _! l/ ^) s' }9 s. b$ d) T% a3 E% b% r& C8 |& l
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( a3 v$ x/ j$ I# u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ n: m* |2 ]2 K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 l* t- \7 |, e$ `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 E4 G' S+ a4 `% Y
7 |8 z& ?: d; w! ?3 ?9 u2 S/* assign the tl som board LED-GPIOs*/
: F1 D/ F: V! mstatic const short da850_evm_tl_user_led_pins[] = {
/ W' S% [5 I/ x1 u, L/ ?6 M0 o /* These pins are definition at <mach/mux.h> file */
8 P; t' d) b( W5 o: v! P, ] DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* E9 c) @- x* M7 h6 c F% i" W -10 b u! ^& f( a0 \" s) A
};' L" U6 R0 l, R2 r' N- D1 }
6 L/ J3 h! x. M1 J8 c6 F$ ostatic struct gpio_led da850_evm_tl_leds[] = {
9 y+ D0 ?4 @. t1 K+ ^5 z {: ~2 V m7 h& V# c/ V
.active_low = 0,3 [0 |) Q: H, ?5 z: O$ Y
.gpio = DA850_USER_LED0,
2 |2 b& x# A9 c .name = "user_led0",5 c6 ?) G4 z7 Z
.default_trigger = "default-on",
/ z% U& O3 P- R- t) \: r# W% v },
) b; K5 B& e: E6 X j, M. v {
b. S* p4 F8 P/ d# a u. b$ [7 Q .active_low = 0," ` O+ y& I, i) k
.gpio = DA850_USER_LED1,/ }! P; V3 f/ a: J. D, s u( |" B
.name = "user_led1",
, d9 w4 L. h* I3 r1 }. H .default_trigger = "default-on",
, Y& F$ a7 Y% g& S. F },
) g. S! i/ Q. _% ?2 r7 ~ {8 ]0 i3 X) P3 j
.active_low = 0,
" w8 i' Z/ `3 i. `: J7 R# ~6 M .gpio = DA850_USER_LED2,
5 \6 M- L+ V1 ?5 w( K- R3 e .name = "user_led2",
2 D Y0 s" M2 w( i% _8 F6 S .default_trigger = "default-on",5 I. e0 L) ?# z8 s
},( g R3 f! B4 L! c5 @& g
{
% b: ] p4 O- f5 e n% B) o .active_low = 0,( U1 ?' o! z' m8 }7 M9 h! E
.gpio = DA850_USER_LED3,% k' j: @2 ]5 H% }
.name = "user_led3",1 B1 U. @; q8 U/ C8 {
.default_trigger = "default-on",5 ]+ d3 y3 K/ c
},
$ b2 v$ N B2 X% z};
2 l3 h5 o( O! f
/ R& ]: z3 v! y/ N" @" Nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 K; D7 [6 i6 E2 ^( X# H+ n: _9 S .leds = da850_evm_tl_leds,
5 e& v# q- ^( |+ a3 j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 a5 C2 ^8 \' c: D0 ^! g) \};& J7 b) S- L6 X( Y: [6 `
% X/ E5 m( H5 g7 @: Y9 ^static void led_dev_release(struct device *dev): D1 c; e( }6 @8 i
{
( z2 W' l( `& [* B3 P# W3 [};
( g) d: `0 j3 l" ]( {2 w/ c5 u) Y" a$ |# c. S- S7 q/ r
static struct platform_device da850_evm_tl_leds_device = {
! O' i, y: c# } .name = "leds-gpio",
) }" D! X7 y1 b .id = 1," s7 e, w7 Y. ]3 |6 [) r
.dev = {
3 ^ J1 K# b7 }9 r .platform_data = &da850_evm_tl_leds_pdata,5 }. ^( X* I3 }* l' ^) a( A' g# |
.release = led_dev_release,' E- I+ R4 i( u/ y/ u. Y
}
3 U/ f: L1 ]7 o% U};
& y- v: j+ Z, u( `: o5 \* }- K
+ m) g; `$ i+ _/ Y1 astatic int __init led_platform_init(void)
3 p& l4 o& c& R7 l$ N* N{! {4 g, A' g6 `
int ret;% D! V3 `3 p9 [5 s* g6 n
#if 0
+ a$ T. m$ t" G' @, | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ X" b$ v v6 @; X% s if (ret)
# L- }% b+ f: T, y }2 v pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ }9 r0 q0 W/ n& Z3 N, n
"%d\n", ret);
8 Z) h5 [ ~! o. L: ~, S' V#endif
. g- X# p( `$ j7 t ret = platform_device_register(&da850_evm_tl_leds_device);
; K$ a w' D: Y- j if (ret)
* b. G& \1 ]4 t pr_warning("Could not register som GPIO expander LEDS");
K, ~) J- Z# I1 ^ else9 [6 J: Z1 I# G2 j8 {( S
printk(KERN_INFO "LED register sucessful!\n");( _7 t5 ?3 `/ O w! _- |
2 B( F Q+ q, _ ^1 S
return ret;8 N, X- u2 o( \" i+ M; ?
}
6 x2 B# a$ ?2 U. J8 O( J, R4 |
/ y' m, j# v# s$ k nstatic void __exit led_platform_exit(void)# H% z, R9 |1 v( {
{
8 ~" I3 o, a/ G }" n9 F. R platform_device_unregister(&da850_evm_tl_leds_device);
9 s' z. C& l( i9 n+ a. t$ w7 T( P3 k, D1 G
printk(KERN_INFO "LED unregister!\n");, ~) \- n1 x2 c9 ~) `& K3 U6 L% S
}3 e/ A: Q, Y6 Q% r
3 U) y6 |9 \1 d1 P! J# B. A3 y7 Tmodule_init(led_platform_init);6 V& {: @/ U! O$ H4 y# E
module_exit(led_platform_exit);
: Q9 \* n" ]0 N6 J* R. i4 w- B' L% a
MODULE_DESCRIPTION("Led platform driver");+ s- q5 y6 G( _+ I- d9 c& ^
MODULE_AUTHOR("Tronlong");
! j! T# J3 o" ~MODULE_LICENSE("GPL");
' C, N5 w0 n1 w- R# g- y" f9 b5 j5 | O
|
|