#include <linux/workqueue.h>
#include <linux/skbuff.h>
#include <linux/netlink.h>
+#include <linux/kobject.h>
#include <net/sock.h>
-extern struct sock *uevent_sock;
extern u64 uevent_next_seqnum(void);
#include "gpio.h"
/* Netgear */
WGT634U,
+ WNR834BV1,
WNR834BV2,
/* Trendware */
/* Microsoft */
MN700,
+
+ /* Edimax */
+ PS1208MFG,
};
static void __init bcm4780_init(void) {
{ .name = "power", .gpio = 1 << 3, .polarity = NORMAL },
},
},
+ /* Netgear */
+ [WNR834BV1] = {
+ .name = "Netgear WNR834B V1",
+ .buttons = { /* TODO: add reset button and confirm LEDs - GPIO from dd-wrt */ },
+ .leds = {
+ { .name = "power", .gpio = 1 << 4, .polarity = REVERSE },
+ { .name = "diag", .gpio = 1 << 5, .polarity = REVERSE },
+ { .name = "wlan", .gpio = 1 << 6, .polarity = REVERSE },
+ },
+ },
+ /* Netgear */
[WNR834BV2] = {
- .name = "Netgear WNR834B V2",
+ .name = "Netgear WNR834B V2",
.buttons = {
{ .name = "reset", .gpio = 1 << 6 },
},
[STI_NAS] = {
.name = "SimpleTech SimpleShare NAS",
.buttons = {
- { .name = "reset", .gpio = 1 << 7 }, // on back, hardwired, always resets device regardless OS state
- { .name = "power", .gpio = 1 << 0 }, // on back
+ { .name = "reset", .gpio = 1 << 0 }, // Power button on back, named reset to enable failsafe.
},
.leds = {
{ .name = "diag", .gpio = 1 << 1, .polarity = REVERSE }, // actual name ready
{ .name = "power", .gpio = 1 << 6, .polarity = NORMAL },
},
},
+ /* Edimax */
+ [PS1208MFG] = {
+ .name = "Edimax PS-1208MFG",
+ .buttons = {
+ { .name = "reset", .gpio = 1 << 4 },
+ },
+ .leds = {
+ { .name = "status", .gpio = 1 << 1, .polarity = NORMAL },
+ { .name = "wlan", .gpio = 1 << 0, .polarity = NORMAL },
+ },
+ },
};
static struct platform_t __init *platform_detect(void)
return &platforms[WDNetCenter];
}
- if (!strcmp(boardnum, "08") || !strcmp(boardnum, "01") &&
- !strcmp(boardtype,"0x0472") && !strcmp(getvar("cardbus"), "1")) { /* Netgear WNR834B V1 and V2*/
- /* TODO: Check for version. Default platform is V2 for now. */
- return &platforms[WNR834BV2];
+ if (!strcmp(boardtype,"0x0472") && !strcmp(getvar("cardbus"), "1")) { /* Netgear WNR834B V1 and V2*/
+ if (!strcmp(boardnum, "08") || !strcmp(boardnum, "8"))
+ return &platforms[WNR834BV1];
+ if (!strcmp(boardnum, "01") || !strcmp(boardnum, "1"))
+ return &platforms[WNR834BV2];
}
} else { /* PMON based - old stuff */
if (startswith(boardnum, "04FN")) /* SimpleTech SimpleShare */
return &platforms[STI_NAS];
- if (!strcmp(getvar("boardnum"), "10") && !strcmp(getvar("boardrev"), "0x13")) /* D-Link DWL-3150 */
+ if (!strcmp(boardnum, "10") && !strcmp(getvar("boardrev"), "0x13")) /* D-Link DWL-3150 */
return &platforms[DWL3150];
+ if (!strcmp(boardnum, "01") && !strcmp(boardtype, "0x048e") && /* Edimax PS1208MFG */
+ !strcmp(getvar("status_gpio"), "1")) /* gpio based detection */
+ return &platforms[PS1208MFG];
+
/* not found */
return NULL;
}
struct event_t *event = container_of(work, struct event_t, wq);
char *s;
- if (!uevent_sock)
- return;
-
event->skb = alloc_skb(2048, GFP_KERNEL);
s = skb_put(event->skb, strlen(event->action) + 2);
fill_event(event);
NETLINK_CB(event->skb).dst_group = 1;
- netlink_broadcast(uevent_sock, event->skb, 0, 1, GFP_KERNEL);
+ broadcast_uevent(event->skb, 0, 1, GFP_KERNEL);
kfree(event);
}