1114402Sru/*
2151497Sru * Copyright 2017, Data61
3114402Sru * Commonwealth Scientific and Industrial Research Organisation (CSIRO)
4114402Sru * ABN 41 687 119 230.
5114402Sru *
6114402Sru * This software may be distributed and modified according to the terms of
7114402Sru * the BSD 2-Clause license. Note that NO WARRANTY is provided.
8114402Sru * See "LICENSE_BSD2.txt" for details.
9114402Sru *
10114402Sru * @TAG(DATA61_BSD)
11114402Sru */
12114402Sru#include <stdint.h>
13114402Sru#include <utils/attribute.h>
14114402Sru#include <platsupport/mux.h>
15114402Sru#include "../../services.h"
16114402Sru
17114402Srustruct imx31_mux_regs {
18114402Sru    int dummy;
19114402Sru};
20151497Sru
21114402Srustatic struct imx31_mux {
22114402Sru    volatile struct imx31_mux_regs*    mux;
23114402Sru} _mux;
24114402Sru
25114402Srustatic inline struct imx31_mux* get_mux_priv(mux_sys_t* mux) {
26114402Sru    return (struct imx31_mux*)mux->priv;
27114402Sru}
28114402Sru
29114402Srustatic inline void set_mux_priv(mux_sys_t* mux, struct imx31_mux* imx31_mux)
30114402Sru{
31114402Sru    assert(mux != NULL);
32114402Sru    assert(imx31_mux != NULL);
33114402Sru    mux->priv = imx31_mux;
34114402Sru}
35114402Sru
36151497Srustatic int
37151497Sruimx31_mux_feature_enable(mux_sys_t* mux, mux_feature_t mux_feature, UNUSED enum mux_gpio_dir mgd)
38151497Sru{
39151497Sru    struct imx31_mux* m;
40151497Sru    if (mux == NULL || mux->priv == NULL) {
41151497Sru        return -1;
42151497Sru    }
43114402Sru    m = get_mux_priv(mux);
44114402Sru
45114402Sru    switch (mux_feature) {
46114402Sru    default:
47114402Sru        (void)m;
48114402Sru        return -1;
49114402Sru    }
50114402Sru}
51114402Sru
52114402Srustatic int
53114402Sruimx31_mux_init_common(mux_sys_t* mux)
54114402Sru{
55114402Sru    set_mux_priv(mux, &_mux);
56114402Sru    mux->feature_enable = &imx31_mux_feature_enable;
57114402Sru    return 0;
58114402Sru}
59114402Sru
60114402Sruint
61114402Sruimx31_mux_init(void* bank1,
62114402Sru               mux_sys_t* mux)
63114402Sru{
64114402Sru    (void)bank1;
65151497Sru    return imx31_mux_init_common(mux);
66151497Sru}
67151497Sru
68151497Sruint
69151497Srumux_sys_init(ps_io_ops_t* io_ops, UNUSED void *dependencies, mux_sys_t* mux)
70151497Sru{
71151497Sru    (void)io_ops;
72151497Sru    return imx31_mux_init_common(mux);
73151497Sru}
74151497Sru