aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/char/ipmi/ipmi_dmi.c2
-rw-r--r--drivers/char/ipmi/ipmi_plat_data.c27
-rw-r--r--drivers/char/ipmi/ipmi_plat_data.h3
-rw-r--r--drivers/char/ipmi/ipmi_si_hardcode.c1
-rw-r--r--drivers/char/ipmi/ipmi_si_hotmod.c1
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
9enum ipmi_plat_interface_type { IPMI_PLAT_IF_SI, IPMI_PLAT_IF_SSIF };
10
9struct ipmi_plat_data { 11struct 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;