|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( E+ n0 Z# `% \6 Q
#include <linux/init.h>
) T/ {% w* p; U& F- ]#include <linux/module.h>: w+ X- ]# o; z- I R5 o# R" _4 P+ t
#include <linux/kernel.h>$ B2 Y0 M' T* }) G' W& Z
#include <linux/types.h>
( ~. y: ^2 F- ]. Y' s2 i% e#include <linux/gpio.h>, J; ]! L9 K! c0 Z: {
#include <linux/leds.h>& L* e1 I0 `8 S; }$ y2 T9 |
#include <linux/platform_device.h>' H. A; Y6 j* b' o
, @6 N0 m' L( p( R- q
#include <asm/mach-types.h>
3 p0 W0 w( P; C#include <asm/mach/arch.h>6 {* q8 }0 m6 T2 [# L; K# P6 i
#include <mach/da8xx.h>8 M' c$ Z$ F7 N3 \
#include <mach/mux.h>; m( o' n, n5 z$ S
+ ]0 z- c: m t! c#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 n5 |" f: Y, L+ m3 ]4 B' w# [$ r
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' |" V/ u- I! A: R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 V6 q* Q3 R$ Q3 s4 v- P. P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), Y8 H2 r" `5 e$ V, F. G( [9 _
7 B1 Z0 n! w& b; N1 N: u/* assign the tl som board LED-GPIOs*/
5 i' i2 |4 S5 m; F+ D9 k9 h) }3 pstatic const short da850_evm_tl_user_led_pins[] = {
" ?0 L5 e! X5 @7 u$ m2 A /* These pins are definition at <mach/mux.h> file */
- k3 h O N$ i/ V3 ^3 ?& x DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" Y Y2 Q; Y/ E7 `' e -1
: B# Q1 m% x& c# f6 m: Y; i; D};
" R+ Y( `7 }" z Z
) T9 y6 c: z5 o! ostatic struct gpio_led da850_evm_tl_leds[] = {) h0 O% V8 U+ J& @5 W/ J; A+ l, o8 K% L
{
) W) C* }! o3 s: \( H% O& U .active_low = 0,( j9 p, ^; l z' F3 }0 r
.gpio = DA850_USER_LED0,
( k4 V* \: Q8 _ ^0 q .name = "user_led0",/ k; A% X- H4 u! F- J- W1 t
.default_trigger = "default-on",
2 J) D& r9 B, U0 Z },
0 |, P, p% e! l0 ~: I- N {8 y* ^) _ ?" b! Q2 u" |6 n
.active_low = 0,! p: D! A& f, h. z; M2 X8 f
.gpio = DA850_USER_LED1,
9 a" k# U* w |9 i .name = "user_led1",
. y0 s% _2 e; u2 U6 A, n .default_trigger = "default-on",
" |, u: O# ^! l+ J$ L) S9 } },
N1 q/ A+ Z- W7 t& L# |2 B& K {, ^: E# Y2 K2 d: _0 D7 j
.active_low = 0,
/ f% X0 K# R# X .gpio = DA850_USER_LED2,9 |8 p7 R0 h: B8 d
.name = "user_led2",. M/ I2 D, l- q2 |
.default_trigger = "default-on",
, T) P* R, Y! n( l' s },: \+ x9 @2 h$ e" v h+ F3 G: k
{
, j2 Q! R) X+ \( n6 i( v# b .active_low = 0,) S, B% ]4 S9 r; {9 O" g$ t% X- j
.gpio = DA850_USER_LED3,( f3 ~3 Q X/ M0 Y @% L% k
.name = "user_led3",
/ h$ c* ]6 W4 b0 z1 X' } .default_trigger = "default-on",
& n. g$ G8 n$ `3 I: s },
- ?1 O. l# D% E2 W- L) o2 P( c) d};
( X8 k( N( [8 V7 m8 h
! d* n* |& p+ L9 Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, ^! j3 v2 e+ ^- _! s8 G .leds = da850_evm_tl_leds,
( v4 V) |4 V9 H .num_leds = ARRAY_SIZE(da850_evm_tl_leds),& {2 G- @2 S9 A9 j" G: V$ I! P
};
c* R0 ~4 \# u& _4 X# c3 B( c2 e! s3 j
static void led_dev_release(struct device *dev)0 x0 u( a) w7 O" u& e6 n! c+ p- Y( N
{
* \, v2 r4 H" ]8 {) U};( U2 u4 A; k6 B; Y6 Q" x2 d
j: u* Q4 M$ ostatic struct platform_device da850_evm_tl_leds_device = {
9 `4 q9 V. U/ d* P- H" U4 O( Y2 _4 u .name = "leds-gpio",* Y) {! @) t V# m
.id = 1,
# W. O# T( [+ P+ `8 ^ .dev = {$ |9 M6 G- X' T+ N. u2 N# T5 f
.platform_data = &da850_evm_tl_leds_pdata,- q4 A; N5 H* j/ K, ~* L; Z
.release = led_dev_release,# q; f: L( k/ F7 L
}
. t$ M5 K! T* r};" U( U- w8 {( a
( H7 Y4 }1 }0 e. \static int __init led_platform_init(void)
. F3 c, r0 R+ q! o$ r+ E& d: n4 W{; O* Q. ^& k5 E$ p+ `
int ret;
( K$ c: x! P( z9 A: ^& ^#if 0
s% V+ p& s- t% E* Y' E3 K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 D; n/ Q% i; u6 c3 V2 ^# X if (ret)
+ |' G& `. s5 r* R6 L: ]: M9 g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* @: S% Q1 O. F2 _8 Z "%d\n", ret);1 k7 I' e, F3 M1 g2 E
#endif
8 i T% Z Q" o0 }" M ret = platform_device_register(&da850_evm_tl_leds_device);
+ D# c5 A$ {2 ` if (ret)) C7 w- \, e5 D$ b6 Q& T
pr_warning("Could not register som GPIO expander LEDS");) o# q0 d% b9 z6 ~% X1 O
else9 }' X6 r+ |% R) p# _) e. l
printk(KERN_INFO "LED register sucessful!\n");
" @, \% e3 e+ K0 N% ?" ^0 ]& _& J# m' g6 z6 Y' p, e
return ret;: o7 N/ f/ {- R- v+ F, B @; k
}2 {8 N( ]+ S5 @, o& M* ^
J4 n- S/ [% H' _( Y$ A! M! f4 ?
static void __exit led_platform_exit(void)) |8 g8 q- \8 Y* F* v# D
{/ M8 `# o! f1 h1 V4 F3 W+ D
platform_device_unregister(&da850_evm_tl_leds_device);' S6 M$ @" p. E8 {- R; Q9 O( q
" F4 K* d: O/ Z( \6 o1 w$ g printk(KERN_INFO "LED unregister!\n");2 H) {6 s' {9 e& C
}( T" b& ~0 a+ a- d/ p* J( _' r
* |4 ]. E C% q# M% m. o/ Cmodule_init(led_platform_init);$ w' e: ?; C( G9 z% |
module_exit(led_platform_exit);% t* {* u! m, z+ B8 `
& h4 ~/ |- }' a) w+ n5 `
MODULE_DESCRIPTION("Led platform driver");
9 f: }8 C% z& O& _% G( Z; tMODULE_AUTHOR("Tronlong");
% f7 @8 e9 f3 s! Q# ZMODULE_LICENSE("GPL");: f/ h9 j$ C: r" a5 E* s
- p/ b0 p* @! v: S |
|