1/*
2 * Copyright 2017, Data61
3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO)
4 * ABN 41 687 119 230.
5 *
6 * This software may be distributed and modified according to the terms of
7 * the BSD 2-Clause license. Note that NO WARRANTY is provided.
8 * See "LICENSE_BSD2.txt" for details.
9 *
10 * @TAG(DATA61_BSD)
11 */
12
13#include "../../sdhc.h"
14#include "../../services.h"
15
16static const int
17_sdhc_irq_table[] = {
18    [SDHC0] = SDHC0_IRQ,
19    [SDHC1] = SDHC1_IRQ,
20    [SDHC2] = SDHC2_IRQ,
21    [SDHC3] = SDHC3_IRQ,
22    [SDHC4] = SDHC4_IRQ
23};
24
25enum sdio_id sdio_default_id(void)
26{
27    return SDHC_DEFAULT;
28}
29
30int sdio_init(enum sdio_id id, ps_io_ops_t *io_ops, sdio_host_dev_t *dev)
31{
32    void *iobase;
33    int ret;
34    switch (id) {
35    case SDHC0:
36        iobase = RESOURCE(io_ops, SDHC0);
37        break;
38    case SDHC1:
39        iobase = RESOURCE(io_ops, SDHC1);
40        break;
41    case SDHC2:
42        iobase = RESOURCE(io_ops, SDHC2);
43        break;
44    case SDHC3:
45        iobase = RESOURCE(io_ops, SDHC3);
46        break;
47    case SDHC4:
48        iobase = RESOURCE(io_ops, SDHC4);
49        break;
50    default:
51        return -1;
52    }
53    if (iobase == NULL) {
54        ZF_LOGE("Failed to map device memory for SDHC");
55        return -1;
56    }
57
58    ret = sdhc_init(iobase, _sdhc_irq_table, NSDHC, io_ops, dev);
59    if (ret) {
60        ZF_LOGE("Failed to initialise SDHC");
61        return -1;
62    }
63    return 0;
64}
65
66
67