diff options
-rw-r--r-- | drivers/char/ipmi/ipmi_dmi.c | 2 | ||||
-rw-r--r-- | drivers/char/ipmi/ipmi_plat_data.c | 27 | ||||
-rw-r--r-- | drivers/char/ipmi/ipmi_plat_data.h | 3 | ||||
-rw-r--r-- | drivers/char/ipmi/ipmi_si_hardcode.c | 1 | ||||
-rw-r--r-- | drivers/char/ipmi/ipmi_si_hotmod.c | 1 |
5 files changed, 22 insertions, 12 deletions
diff --git a/drivers/char/ipmi/ipmi_dmi.c b/drivers/char/ipmi/ipmi_dmi.c index f2411468f33f..f38e651dd1b5 100644 --- a/drivers/char/ipmi/ipmi_dmi.c +++ b/drivers/char/ipmi/ipmi_dmi.c | |||
@@ -47,9 +47,11 @@ static void __init dmi_add_platform_ipmi(unsigned long base_addr, | |||
47 | memset(&p, 0, sizeof(p)); | 47 | memset(&p, 0, sizeof(p)); |
48 | 48 | ||
49 | name = "dmi-ipmi-si"; | 49 | name = "dmi-ipmi-si"; |
50 | p.iftype = IPMI_PLAT_IF_SI; | ||
50 | switch (type) { | 51 | switch (type) { |
51 | case IPMI_DMI_TYPE_SSIF: | 52 | case IPMI_DMI_TYPE_SSIF: |
52 | name = "dmi-ipmi-ssif"; | 53 | name = "dmi-ipmi-ssif"; |
54 | p.iftype = IPMI_PLAT_IF_SSIF; | ||
53 | p.type = SI_TYPE_INVALID; | 55 | p.type = SI_TYPE_INVALID; |
54 | break; | 56 | break; |
55 | case IPMI_DMI_TYPE_BT: | 57 | case IPMI_DMI_TYPE_BT: |
diff --git a/drivers/char/ipmi/ipmi_plat_data.c b/drivers/char/ipmi/ipmi_plat_data.c index 8f0ca2a848eb..28471ff2a3a3 100644 --- a/drivers/char/ipmi/ipmi_plat_data.c +++ b/drivers/char/ipmi/ipmi_plat_data.c | |||
@@ -12,7 +12,7 @@ struct platform_device *ipmi_platform_add(const char *name, unsigned int inst, | |||
12 | struct ipmi_plat_data *p) | 12 | struct ipmi_plat_data *p) |
13 | { | 13 | { |
14 | struct platform_device *pdev; | 14 | struct platform_device *pdev; |
15 | unsigned int num_r = 1, size, pidx = 0; | 15 | unsigned int num_r = 1, size = 0, pidx = 0; |
16 | struct resource r[4]; | 16 | struct resource r[4]; |
17 | struct property_entry pr[6]; | 17 | struct property_entry pr[6]; |
18 | u32 flags; | 18 | u32 flags; |
@@ -21,19 +21,22 @@ struct platform_device *ipmi_platform_add(const char *name, unsigned int inst, | |||
21 | memset(pr, 0, sizeof(pr)); | 21 | memset(pr, 0, sizeof(pr)); |
22 | memset(r, 0, sizeof(r)); | 22 | memset(r, 0, sizeof(r)); |
23 | 23 | ||
24 | if (p->type == SI_BT) | 24 | if (p->iftype == IPMI_PLAT_IF_SI) { |
25 | size = 3; | 25 | if (p->type == SI_BT) |
26 | else if (p->type == SI_TYPE_INVALID) | 26 | size = 3; |
27 | size = 0; | 27 | else if (p->type != SI_TYPE_INVALID) |
28 | else | 28 | size = 2; |
29 | size = 2; | 29 | |
30 | if (p->regsize == 0) | ||
31 | p->regsize = DEFAULT_REGSIZE; | ||
32 | if (p->regspacing == 0) | ||
33 | p->regspacing = p->regsize; | ||
30 | 34 | ||
31 | if (p->regsize == 0) | 35 | pr[pidx++] = PROPERTY_ENTRY_U8("ipmi-type", p->type); |
32 | p->regsize = DEFAULT_REGSIZE; | 36 | } else if (p->iftype == IPMI_PLAT_IF_SSIF) { |
33 | if (p->regspacing == 0) | 37 | pr[pidx++] = PROPERTY_ENTRY_U16("i2c-addr", p->addr); |
34 | p->regspacing = p->regsize; | 38 | } |
35 | 39 | ||
36 | pr[pidx++] = PROPERTY_ENTRY_U8("ipmi-type", p->type); | ||
37 | if (p->slave_addr) | 40 | if (p->slave_addr) |
38 | pr[pidx++] = PROPERTY_ENTRY_U8("slave-addr", p->slave_addr); | 41 | pr[pidx++] = PROPERTY_ENTRY_U8("slave-addr", p->slave_addr); |
39 | pr[pidx++] = PROPERTY_ENTRY_U8("addr-source", p->addr_source); | 42 | pr[pidx++] = PROPERTY_ENTRY_U8("addr-source", p->addr_source); |
diff --git a/drivers/char/ipmi/ipmi_plat_data.h b/drivers/char/ipmi/ipmi_plat_data.h index 567cfcec8ada..9ba744ea9571 100644 --- a/drivers/char/ipmi/ipmi_plat_data.h +++ b/drivers/char/ipmi/ipmi_plat_data.h | |||
@@ -6,7 +6,10 @@ | |||
6 | 6 | ||
7 | #include <linux/ipmi.h> | 7 | #include <linux/ipmi.h> |
8 | 8 | ||
9 | enum ipmi_plat_interface_type { IPMI_PLAT_IF_SI, IPMI_PLAT_IF_SSIF }; | ||
10 | |||
9 | struct ipmi_plat_data { | 11 | struct ipmi_plat_data { |
12 | enum ipmi_plat_interface_type iftype; | ||
10 | unsigned int type; /* si_type for si, SI_INVALID for others */ | 13 | unsigned int type; /* si_type for si, SI_INVALID for others */ |
11 | unsigned int space; /* addr_space for si, intf# for ssif. */ | 14 | unsigned int space; /* addr_space for si, intf# for ssif. */ |
12 | unsigned long addr; | 15 | unsigned long addr; |
diff --git a/drivers/char/ipmi/ipmi_si_hardcode.c b/drivers/char/ipmi/ipmi_si_hardcode.c index 682221eebd66..f6ece7569504 100644 --- a/drivers/char/ipmi/ipmi_si_hardcode.c +++ b/drivers/char/ipmi/ipmi_si_hardcode.c | |||
@@ -83,6 +83,7 @@ static void __init ipmi_hardcode_init_one(const char *si_type_str, | |||
83 | 83 | ||
84 | memset(&p, 0, sizeof(p)); | 84 | memset(&p, 0, sizeof(p)); |
85 | 85 | ||
86 | p.iftype = IPMI_PLAT_IF_SI; | ||
86 | if (!si_type_str || !*si_type_str || strcmp(si_type_str, "kcs") == 0) { | 87 | if (!si_type_str || !*si_type_str || strcmp(si_type_str, "kcs") == 0) { |
87 | p.type = SI_KCS; | 88 | p.type = SI_KCS; |
88 | } else if (strcmp(si_type_str, "smic") == 0) { | 89 | } else if (strcmp(si_type_str, "smic") == 0) { |
diff --git a/drivers/char/ipmi/ipmi_si_hotmod.c b/drivers/char/ipmi/ipmi_si_hotmod.c index 03140f6cdf6f..42a925f8cf69 100644 --- a/drivers/char/ipmi/ipmi_si_hotmod.c +++ b/drivers/char/ipmi/ipmi_si_hotmod.c | |||
@@ -108,6 +108,7 @@ static int parse_hotmod_str(const char *curr, enum hotmod_op *op, | |||
108 | int rv; | 108 | int rv; |
109 | unsigned int ival; | 109 | unsigned int ival; |
110 | 110 | ||
111 | h->iftype = IPMI_PLAT_IF_SI; | ||
111 | rv = parse_str(hotmod_ops, &ival, "operation", &curr); | 112 | rv = parse_str(hotmod_ops, &ival, "operation", &curr); |
112 | if (rv) | 113 | if (rv) |
113 | return rv; | 114 | return rv; |