|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% [7 K2 q X( ]6 y) d+ R- U; E
#include <linux/init.h>
8 H' J4 k5 z7 u$ n" Z& I#include <linux/module.h>: I3 I) j: V0 V$ h6 F' [) m5 G
#include <linux/kernel.h>
. u/ `4 o' r, I0 r5 m9 Y: ^4 p#include <linux/types.h>
: j7 r+ b' P; z0 P8 O#include <linux/gpio.h>
* d# v. F# |" c" v+ F) K#include <linux/leds.h>; p# ~# N$ {5 q; F2 {
#include <linux/platform_device.h>
% o% |! ^8 ] b
& c# Y5 _" w2 ^- L+ }2 ^5 I# g" d#include <asm/mach-types.h>! x' {, M8 V; @9 e0 y! O
#include <asm/mach/arch.h>
$ j* s9 t, W: }' _4 O5 H#include <mach/da8xx.h>/ @0 b ~# H6 E0 K; j0 O
#include <mach/mux.h>! I+ R' E5 M$ Q* C
' Y6 q P8 l8 T8 S! [$ h1 {
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)3 D g. E% b2 [7 G
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 C5 b7 f- a/ A& A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 [. a' ]0 F5 t#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: ?1 I. |+ i' |% G1 M6 I* K% v6 w
/* assign the tl som board LED-GPIOs*/
! ~' L$ C- z6 Ystatic const short da850_evm_tl_user_led_pins[] = {
. L; ^6 ?- r% n3 S2 s /* These pins are definition at <mach/mux.h> file */7 o+ |& y+ d% C$ ]4 ?
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ C" R3 d0 K; X: W
-1
7 R! W5 E+ V' o. M. \};
& w, y4 Q$ ^2 B& r
$ G* i" Z0 Z# N( ]% B, dstatic struct gpio_led da850_evm_tl_leds[] = {. \+ \$ J; F t! J- i% [4 i1 n
{
4 [! F# H' ^6 ~2 Q- [6 f2 E3 @3 Q .active_low = 0,
5 u- W% N* W$ `& g: m" q8 |" ^/ K .gpio = DA850_USER_LED0,, G' h$ _3 P4 o" q
.name = "user_led0",
& c6 x3 V$ g8 p .default_trigger = "default-on",: W5 o' F9 d5 B9 u* w
},5 r1 t6 ]: k9 i' `5 C- d9 Q5 }& z8 W
{
9 l# N: t, z2 t% w4 V8 n, [% j .active_low = 0,
8 { [8 Z9 J* H; S .gpio = DA850_USER_LED1,7 S$ Q9 _/ F9 Q$ `
.name = "user_led1",
0 Y, F) ~& ^+ F .default_trigger = "default-on",
" Y& p3 s0 q* `1 }# g7 c },* Z' n/ A3 W* Y+ c8 y
{7 a3 h7 s2 O) o( h* V$ w
.active_low = 0,
, k( F! a4 Z: X' \" r# A .gpio = DA850_USER_LED2,
# X- x, d6 u. r( s% C3 a .name = "user_led2",0 N6 J, K( u `- l/ n
.default_trigger = "default-on",/ u9 ~& l7 U1 I
},! I) F6 g3 G" Q/ ]) d# k8 r
{
% q1 X9 i, w" w0 T' ^ .active_low = 0,: S S- \& m& r1 l: D6 q" v: j
.gpio = DA850_USER_LED3,$ s8 o9 K! i7 Y: d" p0 u
.name = "user_led3",
7 a7 y) x, S* e' [ .default_trigger = "default-on"," m9 x: q. j' E; m' ^0 t6 X! `
},, O+ j# K1 i+ Z6 s
};; a |7 w0 C% R! w9 Z" E* z; ~
, F9 M8 }# r, L, ~4 l H" c8 v
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ y- s+ c ?1 S$ S" S2 G
.leds = da850_evm_tl_leds," H4 U# t% R- n0 v) O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) d- o. u! V- b: @% O};
5 A6 G3 M' s: o" a" N: J
" k- m+ o" p1 v9 Sstatic void led_dev_release(struct device *dev)
: w- k- S: M# S. ^' g{
: l# J! n2 ?2 H4 D! \# V};- t9 l1 r9 B r2 j
& _& R# b- I4 T- Sstatic struct platform_device da850_evm_tl_leds_device = {
3 k0 ~, L" q# [3 f .name = "leds-gpio",% g) J' v2 g- _3 d. R
.id = 1,
, \% l7 f1 Q2 ~; p |6 A. D .dev = {9 d3 f2 U1 X6 T' T
.platform_data = &da850_evm_tl_leds_pdata,
4 v- b c/ v5 w0 b- ]' \% J0 Z .release = led_dev_release,
; K1 b U6 X3 y* ]. V3 T }
; o: o m$ l5 P* d};0 j+ q! G H* _6 v
+ x$ F8 k2 a( ]5 ^& [1 Nstatic int __init led_platform_init(void): P' z6 i9 f, r- A n' d' \
{
% p7 z( q! ~$ @7 r/ O* J int ret;
* W& [/ t9 b1 p2 p#if 0
8 ~5 n+ |4 B! b. _& U' V ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 p* w0 _) k7 u' u if (ret)& r8 y5 O E* p( X) ^- T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
W' x5 t, |* ]& J* [1 Z' ]: Y6 Z "%d\n", ret);, C V0 G* A8 D/ h3 E, U
#endif
$ p5 H( ] O, P- V! X2 ?9 R% y ret = platform_device_register(&da850_evm_tl_leds_device);
: K" X" W+ |4 o0 b/ w if (ret)+ _5 u' b6 T7 ?, y2 R6 d% K7 y2 a
pr_warning("Could not register som GPIO expander LEDS");
" K5 H7 @ E# c: b& m/ d) o else. k. Q# a0 \4 p0 f. r0 A+ l! F2 x
printk(KERN_INFO "LED register sucessful!\n");
7 q/ L3 f6 I. E, u/ ^$ o1 u* l, j u3 A V
return ret; q1 V* i1 S" g; f
}% g: y" S4 i" {" ?
8 i3 C. o: g" c/ s0 Pstatic void __exit led_platform_exit(void)
2 n. q) a% U& }' I; z5 b{, D6 W7 m7 D8 C8 Y6 G7 Z% u
platform_device_unregister(&da850_evm_tl_leds_device);
* w# C6 M3 k. \. c$ S; l4 P! ^6 A# t t6 j- M
printk(KERN_INFO "LED unregister!\n");# ^5 [+ m+ P3 s4 N+ F( A6 \3 o
}$ M9 D5 ], _ F% Q( ~
6 k" x! a1 Y0 Y8 `6 y+ M9 P: Z# g
module_init(led_platform_init);0 g1 ~# N- s7 [, b" t0 E! q `
module_exit(led_platform_exit);
. C p0 a4 P! ]( V# O9 ^
5 Y& O1 _! h, ^, E0 i& wMODULE_DESCRIPTION("Led platform driver");
1 G- @7 u( m! I4 w+ U6 |/ q k& KMODULE_AUTHOR("Tronlong");
" J. d# i! a/ `1 i8 zMODULE_LICENSE("GPL");
: Z" h+ m7 `, |8 ]5 C6 m
. Q9 H" N5 _; C |
|