Morse Micro IoT SDK  2.9.7
chip_cfg.c
1/*
2 * Copyright 2025 Morse Micro
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#include "chip_cfg.h"
8#include "sdio_spi.h"
9
10#include "mmutils.h"
11
12
13const uint32_t mm6108_valid_chip_ids[] = {
14 0x206,
15 0x306,
16 0x406,
17};
18
19
20static int mm6108_gpio_set_oe(uint8_t gpio_num, bool oe)
21{
22 if (oe)
23 {
24 return sdio_spi_set_bits_le32(0x10012008, 1ul << gpio_num);
25 }
26 else
27 {
28 return sdio_spi_clear_bits_le32(0x10012008, 1ul << gpio_num);
29 }
30}
31
32static int mm6108_gpio_set_value(uint8_t gpio_num, bool value)
33{
34 if (value)
35 {
36 return sdio_spi_set_bits_le32(0x1001200c, 1ul << gpio_num);
37 }
38 else
39 {
40 return sdio_spi_clear_bits_le32(0x1001200c, 1ul << gpio_num);
41 }
42}
43
44const uint32_t mm8108_valid_chip_ids[] = {
45 0x609,
46 0x709,
47 0x809,
48};
49
50static int mm8108_gpio_set_oe(uint8_t gpio_num, bool oe)
51{
52 if (oe)
53 {
54 return sdio_spi_write_le32(0x1360, 1ul << gpio_num);
55 }
56 else
57 {
58 return sdio_spi_write_le32(0x1364, 1ul << gpio_num);
59 }
60}
61
62static int mm8108_gpio_set_value(uint8_t gpio_num, bool value)
63{
64 if (value)
65 {
66 return sdio_spi_write_le32(0x1368, 1ul << gpio_num);
67 }
68 else
69 {
70 return sdio_spi_write_le32(0x136c, 1ul << gpio_num);
71 }
72}
73
74const struct chip_cfg chip_cfgs[] = {
75 {
76 .name = "mm6108",
77 .reg_chip_id = 0x10054d20,
78 .gpio_set_oe = mm6108_gpio_set_oe,
79 .gpio_set_value = mm6108_gpio_set_value,
80 .busy_gpio_num = 0,
81 .valid_chip_ids = mm6108_valid_chip_ids,
82 .n_valid_chip_ids = MM_ARRAY_COUNT(mm6108_valid_chip_ids),
83 },
84 {
85 .name = "mm8108",
86 .reg_chip_id = 0x00002d20,
87 .gpio_set_oe = mm8108_gpio_set_oe,
88 .gpio_set_value = mm8108_gpio_set_value,
89 .busy_gpio_num = 2,
90 .valid_chip_ids = mm8108_valid_chip_ids,
91 .n_valid_chip_ids = MM_ARRAY_COUNT(mm8108_valid_chip_ids),
92 },
93};
94
95const size_t n_chip_cfgs = MM_ARRAY_COUNT(chip_cfgs);
#define MM_ARRAY_COUNT(_a)
Return the number of elements in the given array.
Definition: mmutils.h:110
Chip configuration data structure.
Definition: chip_cfg.h:16
const char * name
Chip name.
Definition: chip_cfg.h:18