|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- z, N; G @2 c#include <linux/init.h>
1 E [$ `( e* ^( i4 n0 L6 S% w7 S. a9 \#include <linux/module.h>
2 y$ n" y4 ?7 q#include <linux/kernel.h>
3 \& {: y0 P* Z& h- ]! r#include <linux/types.h>
: X3 t" {" R& F( b# f( |! \#include <linux/gpio.h>
; `; c2 } D5 N4 Z#include <linux/leds.h>
! u9 @" p1 u3 s% u% E" N#include <linux/platform_device.h>
8 p) i V" N$ k( Y" ~1 P9 z: i1 d
#include <asm/mach-types.h>+ h, D2 \/ n! Z, v
#include <asm/mach/arch.h>
5 E+ E9 O# u4 g#include <mach/da8xx.h>
; F4 x* w3 l- ^#include <mach/mux.h>
5 I* z9 h) a; @9 [
# G6 E3 ]( e' Z& U8 k& |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# |8 @! x9 D- N7 I/ c
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% |% g- w. u# u0 l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). O" S* \: w o# h/ x2 [2 f& m' i
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 |- G' P; `( k9 j* C
& M6 k) L" {, O# m5 w7 P
/* assign the tl som board LED-GPIOs*/
( r4 x W& L; X3 F8 R6 estatic const short da850_evm_tl_user_led_pins[] = {
" p+ y. k) B1 N. [# N /* These pins are definition at <mach/mux.h> file */
: O. }# D* A) S W* u: _ h DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ b' I1 n9 R. g) J2 Q -1
E( r9 Y( i' H' r};4 l; M: G1 K% _1 J5 Y+ Z3 V& z
0 f7 t# N& n+ E) R2 _. ]% w
static struct gpio_led da850_evm_tl_leds[] = {- s P+ y K7 H
{
5 p2 ]5 ~1 p$ i3 q .active_low = 0,; ]# H2 d% t% e8 G4 X6 O! u2 U, M) Y
.gpio = DA850_USER_LED0,+ l: g; u; Z- b& j, A' ?
.name = "user_led0",
9 w; @) e$ l) q, J+ x, D .default_trigger = "default-on",
8 Y7 b* T0 L4 O# {- c+ ^ },
! i1 `) x$ ]4 U, T, P, L, X o {
( Z8 }2 L" C. l4 a1 i( K* \0 {" | .active_low = 0,
) |0 a8 m c3 C( J! V+ | .gpio = DA850_USER_LED1,
" d0 {' V+ [. E, N .name = "user_led1",- Z, j1 E$ x4 E: i
.default_trigger = "default-on",
+ W, I9 p: k! X* u$ s },
2 `2 q* k3 Q j) B5 F( l. o {% A% o" W' w D; [% r6 t
.active_low = 0,4 Z8 A z; g8 x+ c1 C
.gpio = DA850_USER_LED2,
- J+ u5 a4 {6 C" E4 D4 ` .name = "user_led2",
) i2 ^0 J4 b w' x .default_trigger = "default-on",
3 q) Y0 p* U; c; L K- H, D },% O/ ?9 r3 @+ g( O+ M/ N
{: A9 I3 |0 u0 j
.active_low = 0,
' q* E* p3 T: i9 N1 z& p .gpio = DA850_USER_LED3,
i5 }* D+ w* z .name = "user_led3",7 Y5 d+ x+ {6 e! i8 T/ i: b+ f
.default_trigger = "default-on",2 n5 n" a% _- |% }8 J; K* _
},& G1 h$ o! e: } N/ R3 ^* ?
};! J! o/ `0 Y" L- a8 X7 g
( @/ R X9 x# ]8 v6 q0 z* [9 j ?static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( [$ I0 F$ `0 T. r .leds = da850_evm_tl_leds,5 c" M. X9 }5 r! a/ O' ?
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ k4 W6 P7 Z- X$ q- z};
3 V1 U3 F8 X1 }* W8 ~, g4 \, V" H7 I" L& M9 R- t& Q ]
static void led_dev_release(struct device *dev)
! t+ U% u2 K/ B" k# W$ c{
( d2 t( k; t# o& M [. w/ Q6 J};
4 e3 _5 l: H# [" c
E6 N3 B8 @/ m6 F4 ustatic struct platform_device da850_evm_tl_leds_device = {
, X7 j/ \- I7 ? h0 o" L .name = "leds-gpio",- f6 k D9 U4 u: K
.id = 1,
0 b% c! w1 U1 Y .dev = {
: X2 G. \5 }5 L: L# d .platform_data = &da850_evm_tl_leds_pdata,
9 ~- l$ O; m) W$ Z .release = led_dev_release,
4 ?, T- y9 A! T! X; g2 B* R8 A }/ K, Z) w. d+ B+ T7 [) W
};
4 q& P6 _* Z/ }% m! i' |
( h) b3 q) j. ^6 N# Gstatic int __init led_platform_init(void)
1 e1 `# J- r8 Q{
$ i* l2 L0 [* q5 n int ret;
* I+ X x" { D% y8 f* m( K#if 0* t4 y' a! D$ _) i0 \
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 o7 } } h Y' ]2 |
if (ret). ^: T+ Z( a9 N
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! V, |+ e/ p. H+ q3 `6 N "%d\n", ret);
, \; l3 O3 b: |# N, E2 z, [8 X#endif2 g R( W s/ a3 u. B r) c1 _3 @
ret = platform_device_register(&da850_evm_tl_leds_device);
4 ]7 d' g8 e. T h `% @ if (ret)& w# ^) G" ?: i* E' v5 _- _0 j; r: L
pr_warning("Could not register som GPIO expander LEDS");: O: K- h% k! o9 Z: L
else
: F( R$ J3 N z, H1 V* B printk(KERN_INFO "LED register sucessful!\n");& t& ^# H3 k; E. l) W
. X7 i9 F, Z$ {4 i return ret;2 v4 i2 X$ \ {7 k$ b
}6 k; y; a5 L ]+ ^" P3 _) \: j
, D+ p; u8 C7 [7 P' h4 n' I" |3 Gstatic void __exit led_platform_exit(void)8 ?' O0 e4 r' d8 x. O& _0 q
{, d7 R3 i7 k, d4 n0 ?3 B
platform_device_unregister(&da850_evm_tl_leds_device);7 g' a- k) i% J4 n8 |1 f7 h) `
) R: r9 Y; Y$ ]) e8 G) @& i! M printk(KERN_INFO "LED unregister!\n");
8 s9 u2 n7 d4 l O8 D, K}0 ^' Y4 U! T9 `1 U4 |. p4 m/ i
. V- t" J s- Jmodule_init(led_platform_init);
6 [) n& o _$ ^! s, |, hmodule_exit(led_platform_exit);5 w& {. c" ^! l- v& v' F+ t' ^
8 p( k1 F2 ]: ^& V' B4 j( X
MODULE_DESCRIPTION("Led platform driver");( z( m4 ?" o5 p I% p6 C
MODULE_AUTHOR("Tronlong");
7 n; ]& J7 Z: P9 x$ w( O6 lMODULE_LICENSE("GPL");
. p+ s* ^1 |& _" b# D. m
& ~) B4 k, k5 [/ {) { |
|