Skip to content

Commit c6bc42c

Browse files
committed
Merge branch 'refs/heads/bits/080-wifi' into asahi-wip
2 parents 2e67021 + fa75968 commit c6bc42c

20 files changed

Lines changed: 911 additions & 137 deletions

File tree

drivers/acpi/x86/apple.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,16 @@ void acpi_extract_apple_properties(struct acpi_device *adev)
7171

7272
if ( key->type != ACPI_TYPE_STRING ||
7373
(val->type != ACPI_TYPE_INTEGER &&
74-
val->type != ACPI_TYPE_BUFFER))
74+
val->type != ACPI_TYPE_BUFFER &&
75+
val->type != ACPI_TYPE_STRING))
7576
continue; /* skip invalid properties */
7677

7778
__set_bit(i, valid);
7879
newsize += key->string.length + 1;
7980
if ( val->type == ACPI_TYPE_BUFFER)
8081
newsize += val->buffer.length;
82+
else if (val->type == ACPI_TYPE_STRING)
83+
newsize += val->string.length + 1;
8184
}
8285

8386
numvalid = bitmap_weight(valid, numprops);
@@ -119,6 +122,12 @@ void acpi_extract_apple_properties(struct acpi_device *adev)
119122
newprops[v].type = val->type;
120123
if (val->type == ACPI_TYPE_INTEGER) {
121124
newprops[v].integer.value = val->integer.value;
125+
} else if (val->type == ACPI_TYPE_STRING) {
126+
newprops[v].string.length = val->string.length;
127+
newprops[v].string.pointer = free_space;
128+
memcpy(free_space, val->string.pointer,
129+
val->string.length);
130+
free_space += val->string.length + 1;
122131
} else {
123132
newprops[v].buffer.length = val->buffer.length;
124133
newprops[v].buffer.pointer = free_space;

drivers/net/wireless/broadcom/brcm80211/brcmfmac/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ brcmfmac-$(CONFIG_OF) += \
4848
of.o
4949
brcmfmac-$(CONFIG_DMI) += \
5050
dmi.o
51+
brcmfmac-$(CONFIG_ACPI) += \
52+
acpi.o
5153

5254
ifeq ($(CONFIG_BRCMFMAC),m)
5355
obj-m += wcc/
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// SPDX-License-Identifier: ISC
2+
/*
3+
* Copyright The Asahi Linux Contributors
4+
*/
5+
6+
#include <linux/acpi.h>
7+
#include "debug.h"
8+
#include "core.h"
9+
#include "common.h"
10+
11+
void brcmf_acpi_probe(struct device *dev, enum brcmf_bus_type bus_type,
12+
struct brcmf_mp_device *settings)
13+
{
14+
acpi_status status;
15+
const union acpi_object *o;
16+
struct acpi_buffer buf = {ACPI_ALLOCATE_BUFFER, NULL};
17+
struct acpi_device *adev = ACPI_COMPANION(dev);
18+
19+
if (!adev)
20+
return;
21+
22+
if (!ACPI_FAILURE(acpi_dev_get_property(adev, "module-instance",
23+
ACPI_TYPE_STRING, &o))) {
24+
brcmf_dbg(INFO, "ACPI module-instance=%s\n", o->string.pointer);
25+
settings->board_type = devm_kasprintf(dev, GFP_KERNEL,
26+
"apple,%s",
27+
o->string.pointer);
28+
} else {
29+
brcmf_dbg(INFO, "No ACPI module-instance\n");
30+
}
31+
32+
status = acpi_evaluate_object(adev->handle, "RWCV", NULL, &buf);
33+
o = buf.pointer;
34+
if (!ACPI_FAILURE(status) && o && o->type == ACPI_TYPE_BUFFER &&
35+
o->buffer.length >= 2) {
36+
char *antenna_sku = devm_kzalloc(dev, 3, GFP_KERNEL);
37+
38+
if (!antenna_sku) {
39+
brcmf_err("Failed to allocate antenna-sku");
40+
} else {
41+
memcpy(antenna_sku, o->buffer.pointer, 2);
42+
brcmf_dbg(INFO, "ACPI RWCV data=%*phN antenna-sku=%s\n",
43+
(int)o->buffer.length, o->buffer.pointer,
44+
antenna_sku);
45+
settings->antenna_sku = antenna_sku;
46+
}
47+
48+
kfree(buf.pointer);
49+
} else {
50+
brcmf_dbg(INFO, "No ACPI antenna-sku\n");
51+
}
52+
}

drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212

1313
static int brcmf_bca_attach(struct brcmf_pub *drvr)
1414
{
15-
pr_err("%s: executing\n", __func__);
15+
pr_info("%s: executing\n", __func__);
1616
return 0;
1717
}
1818

1919
static void brcmf_bca_detach(struct brcmf_pub *drvr)
2020
{
21-
pr_err("%s: executing\n", __func__);
21+
pr_info("%s: executing\n", __func__);
2222
}
2323

2424
const struct brcmf_fwvid_ops brcmf_bca_ops = {

drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ enum brcmf_bus_protocol_type {
5555
/* Firmware blobs that may be available */
5656
enum brcmf_blob_type {
5757
BRCMF_BLOB_CLM,
58+
BRCMF_BLOB_TXCAP,
5859
};
5960

6061
struct brcmf_mp_device;
@@ -106,6 +107,7 @@ struct brcmf_bus_ops {
106107
void (*debugfs_create)(struct device *dev);
107108
int (*reset)(struct device *dev);
108109
void (*remove)(struct device *dev);
110+
void (*d2h_mb_rx)(struct device *dev, u32 data);
109111
};
110112

111113

@@ -285,6 +287,15 @@ static inline void brcmf_bus_remove(struct brcmf_bus *bus)
285287
bus->ops->remove(bus->dev);
286288
}
287289

290+
static inline
291+
void brcmf_bus_d2h_mb_rx(struct brcmf_bus *bus, u32 data)
292+
{
293+
if (!bus->ops->d2h_mb_rx)
294+
return;
295+
296+
return bus->ops->d2h_mb_rx(bus->dev, data);
297+
}
298+
288299
/*
289300
* interface functions from common layer
290301
*/

0 commit comments

Comments
 (0)