|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 w4 a- w+ g2 i" G- f$ w; K
#include <linux/init.h>
- I. B% J" m4 {- G#include <linux/module.h>+ O4 N4 i# v7 ^4 N _' y# ]
#include <linux/kernel.h>5 E, `* e* X# P
#include <linux/types.h>
) W0 F0 H% b$ X& ^& I; s#include <linux/gpio.h>( H2 c3 a7 c1 p# `1 w6 w9 U% A8 Z# y
#include <linux/leds.h>- O6 m+ I1 H U1 Y$ Z: y
#include <linux/platform_device.h>
6 A2 p; n& Q1 J T! x; X% ~' a9 b
#include <asm/mach-types.h>8 d1 T0 p- N; o
#include <asm/mach/arch.h>
) [4 l, @- m( D% z# R! e* C: q#include <mach/da8xx.h>
0 V, g& c1 [2 ?#include <mach/mux.h>
. P$ k& k9 o* g" y* W! R' P$ _' P( T; d- T1 a
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; I0 b9 D; H: \# D3 h5 a% [: h1 t#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). ?+ n& N% o* m/ W8 v. N2 f
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 S0 {. R$ Q& p& q8 A* d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 h2 W9 q, J4 z) A" A) M4 l1 }( x
0 O8 c/ F; g$ N: v/* assign the tl som board LED-GPIOs*/
, p' |' X! ^4 P! g$ V( `# a& H7 h) Cstatic const short da850_evm_tl_user_led_pins[] = {( ?1 W" k* [( v) G
/* These pins are definition at <mach/mux.h> file */
* k4 ^* a; [) S( s DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' u# W) y+ o! `; `6 w; ? -1# _$ O' u. z0 I# E! b9 _' I1 A7 J
};
) }8 E! \8 }7 p0 Q( ~+ |$ Q
* }% h1 F1 M/ a% [: `static struct gpio_led da850_evm_tl_leds[] = {0 n/ h6 j' s' i5 }+ d9 t1 {
{
V$ S0 Q5 s5 t .active_low = 0,* A: g. j! F) J4 q& f
.gpio = DA850_USER_LED0,: f- i8 B. ]( B' Z: {2 T( I8 n
.name = "user_led0",; v0 `0 n$ q! \6 e! c( P
.default_trigger = "default-on",/ K. B( E) ?5 [- h9 A
}, I; F7 |4 `3 u# P
{
8 a/ K, n" ^, {7 I' A" `% n .active_low = 0,
/ z( r! G8 @ C% `" t .gpio = DA850_USER_LED1,
$ d; d6 B; U' ] .name = "user_led1",: j6 S& _7 t. I: J" ^' g x2 Q2 ?
.default_trigger = "default-on",
! j/ A2 ], J! d5 i },
( ~) o$ u k7 l1 _4 w4 Z8 T {- m3 f6 k. _% s* E, @( v
.active_low = 0,
' i2 z9 x; X p! w# H& G .gpio = DA850_USER_LED2,1 D" a# K. J! a: \. L' [
.name = "user_led2",
. x0 w; R' y* n2 D r .default_trigger = "default-on",5 |% F3 C* p- @: Y9 B6 _! R( J- ^
},
7 Q6 ^% j! c; e0 E" M! J+ j5 A N {4 a7 L+ ?3 N0 [- L7 Z! R" M2 }- h1 T8 k; G" ?
.active_low = 0,
4 a% [& R# @' ?7 X+ y+ P .gpio = DA850_USER_LED3,! A0 @+ E8 W+ t8 N* N" o1 f4 J0 {
.name = "user_led3",% x1 _+ P/ X# [; \/ |6 `: n8 f
.default_trigger = "default-on",7 e4 H( |! N: M# o
}, L# y, g' K4 s% V: u
};
# o! O Q" ~( H+ |6 X, @& }/ [
$ L) a; b0 H z5 v. I3 n9 Q; qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' ]9 [$ w ?+ q C
.leds = da850_evm_tl_leds,: \( X+ t- P* ~3 |
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 Z: i5 S4 Y7 x0 c/ Z: e3 L _
};# K; X B/ c9 r6 L, L% ^2 n8 {
% a) _0 r, m6 z# K- T7 o3 L
static void led_dev_release(struct device *dev)+ x( Q$ q" g; s2 C0 A+ h
{' b# ~& y- f* m& y( |! i; D
};6 r, `9 {8 A' n9 v1 @# X
6 x% Z4 f, i9 Tstatic struct platform_device da850_evm_tl_leds_device = {7 o2 j- |+ \- _& g# K9 p! R) z
.name = "leds-gpio",
* n5 R" \* t/ p8 V& w' E .id = 1,2 m8 H0 F! o' Z$ r. k
.dev = {# ]0 V# [. r* f& r. f. w) F1 ^) m
.platform_data = &da850_evm_tl_leds_pdata,3 z- d, M- R/ L4 g) x/ Q
.release = led_dev_release,
' p+ c9 Q2 x" O1 Y, Z& o S9 | }
4 X, x( F, f- d8 x% H2 `8 {$ g};! `+ ]* }) p9 c( W3 f6 t z
, K: \* s, A0 j1 K' {" nstatic int __init led_platform_init(void)
4 ]0 m' ?" N2 o5 |{
/ W7 n1 y% }& k6 q: Y int ret;
+ B2 Q1 Q" M6 p3 m#if 0
: v7 R; b+ C* I ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 ~/ L) E. J$ r; H( L6 L if (ret)
" o$ r$ ]. B9 ?$ t pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 F# |$ o8 v1 F9 G "%d\n", ret); W6 ~6 a, c, |
#endif
+ W# Q, I! f: E( L4 J2 P2 j ret = platform_device_register(&da850_evm_tl_leds_device);
5 I) S0 i$ P; g: e8 ^+ ` if (ret)3 f" ?. o% B- A
pr_warning("Could not register som GPIO expander LEDS");
/ \- P$ @6 I' {: v else& w o9 O$ f. E5 K1 a8 y) M
printk(KERN_INFO "LED register sucessful!\n");
$ X! G7 s5 X& k* o
7 m x0 v, I: Q) W$ G- R% P# Y! T return ret;
# V4 l N b% J9 G6 t- o}5 i% ^( U) O; @" R4 n: `$ K+ h
1 `. H: D7 C6 C$ |6 k# fstatic void __exit led_platform_exit(void)4 e X# I+ U% V9 Y$ q
{
/ G; D1 u5 O: ? g9 L; } platform_device_unregister(&da850_evm_tl_leds_device);
0 R! N ~/ _ U. K% d% r
# l- _ ?1 x P. a2 ` printk(KERN_INFO "LED unregister!\n");
1 R+ h8 H6 G0 a% X}
+ X, C7 x& V1 r4 @) |0 y; O+ V( T) @ L
module_init(led_platform_init);/ @8 R7 N W5 J. c
module_exit(led_platform_exit);& t( R, B; P! r+ O0 `
2 m, n( o. Y/ {4 @
MODULE_DESCRIPTION("Led platform driver");
. U/ ]8 k! H4 q# |& SMODULE_AUTHOR("Tronlong");
1 P9 X p4 z* o# Z3 [MODULE_LICENSE("GPL");, ^4 c4 `/ L- J3 W' d0 `( h* f5 p' ]
( A1 |. n6 e: j; R, [: s% j
|
|