2 * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 /******************************************************************************
19 * @brief source file for the pinmux
22 ******************************************************************************/
28 ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; })
30 #define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
32 /*******************************************************************************
33 * function: hobbit_ioreuse_inital
36 * initial hobbit_pinmux
37 *******************************************************************************/
39 extern int32_t target_qspi_init(pin_name_t mosi, pin_name_t miso, pin_name_t sclk, pin_name_t ssel, pin_name_t wp, pin_name_t hold, uint32_t *base, uint32_t *irq);
41 void hobbit_ioreuse_initial(void)
45 /* gpio data source select */
46 value = readl(HOBBIT_GIPO0_PORTCTL_REG);
47 value |= GPIO0_REUSE_EN;
48 writel(value, HOBBIT_GIPO0_PORTCTL_REG);
50 value = readl(HOBBIT_GIPO1_PORTCTL_REG);
51 value |= GPIO1_REUSE_EN;
52 writel(value, HOBBIT_GIPO1_PORTCTL_REG);
54 /* reuse function select */
55 value = readl(HOBBIT_IOMUX0L_REG);
56 value |= IOMUX0L_FUNCTION_SEL;
57 writel(value, HOBBIT_IOMUX0H_REG);
59 value = readl(HOBBIT_IOMUX0H_REG);
60 value |= IOMUX1L_FUNCTION_SEL;
61 writel(value, HOBBIT_IOMUX0H_REG);
63 value = readl(HOBBIT_IOMUX1L_REG);
64 value |= IOMUX1L_FUNCTION_SEL;
65 writel(value, HOBBIT_IOMUX1L_REG);
67 target_qspi_init(PA4_QSPI0MOSI_XX_XX_XX, PA3_QSPI0MISO_XX_XX_XX, PA2_QSPI0CLK_XX_XX_XX, PA7_QSPI0CS0_XX_XX_XX, PA6_QSPI0WP_XX_XX_XX, PA5_QSPI0HOLD_XX_XX_XX, 0, 0);
70 int32_t pin_mux(pin_name_t pin, uint16_t function)
73 unsigned int reg_val = 0;
78 if (pin < PB0_UART2TX_XX_XX_SIROUT2) {
80 /* gpio data source select */
81 val = readl(HOBBIT_GIPO0_PORTCTL_REG);
82 val &= ~(1 << offset);
83 writel(val, HOBBIT_GIPO0_PORTCTL_REG);
85 } else if (pin >= PB0_UART2TX_XX_XX_SIROUT2) {
87 /* gpio data source select */
88 val = readl(HOBBIT_GIPO1_PORTCTL_REG);
89 val &= ~(1 << offset);
90 writel(val, HOBBIT_GIPO1_PORTCTL_REG);
97 if (pin >= PB0_UART2TX_XX_XX_SIROUT2) {
100 /* gpio data source select */
101 val = readl(HOBBIT_GIPO1_PORTCTL_REG);
102 val |= (1 << offset);
103 writel(val, HOBBIT_GIPO1_PORTCTL_REG);
105 reg_val = (0x3 << (offset * 2));
106 /* reuse function select */
107 val = readl(HOBBIT_IOMUX1L_REG);
109 val |= (function << (2 * offset));
110 writel(val, HOBBIT_IOMUX1L_REG);
115 /* gpio data source select */
116 val = readl(HOBBIT_GIPO0_PORTCTL_REG);
117 val |= (1 << offset);
118 writel(val, HOBBIT_GIPO0_PORTCTL_REG);
120 if (pin >= PA16_SPI0CS0_PWMTRIG0_XX_USI1SCLK) {
122 reg_val = (0x3 << (offset * 2));
123 /* reuse function select */
124 val = readl(HOBBIT_IOMUX0H_REG);
126 val |= (function << (2 * offset));
127 writel(val, HOBBIT_IOMUX0H_REG);
131 reg_val = (0x3 << (offset * 2));
132 /* reuse function select */
133 val = readl(HOBBIT_IOMUX0L_REG);
135 val |= (function << (2 * offset));
136 writel(val, HOBBIT_IOMUX0L_REG);