1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Copyright (C) 2016 Socionext Inc. 4 * Author: Masahiro Yamada <yamada.masahiro@socionext.com> 5 */ 6 7 #include <linux/stddef.h> 8 9 #include "clk-uniphier.h" 10 11 #define UNIPHIER_MIO_CLK_SD_FIXED \ 12 UNIPHIER_CLK_FACTOR("sd-44m", -1, "sd-133m", 1, 3), \ 13 UNIPHIER_CLK_FACTOR("sd-33m", -1, "sd-200m", 1, 6), \ 14 UNIPHIER_CLK_FACTOR("sd-50m", -1, "sd-200m", 1, 4), \ 15 UNIPHIER_CLK_FACTOR("sd-67m", -1, "sd-200m", 1, 3), \ 16 UNIPHIER_CLK_FACTOR("sd-100m", -1, "sd-200m", 1, 2), \ 17 UNIPHIER_CLK_FACTOR("sd-40m", -1, "sd-200m", 1, 5), \ 18 UNIPHIER_CLK_FACTOR("sd-25m", -1, "sd-200m", 1, 8), \ 19 UNIPHIER_CLK_FACTOR("sd-22m", -1, "sd-133m", 1, 6) 20 21 #define UNIPHIER_MIO_CLK_SD(_idx, ch) \ 22 { \ 23 .name = "sd" #ch "-sel", \ 24 .type = UNIPHIER_CLK_TYPE_MUX, \ 25 .idx = -1, \ 26 .data.mux = { \ 27 .parent_names = { \ 28 "sd-44m", \ 29 "sd-33m", \ 30 "sd-50m", \ 31 "sd-67m", \ 32 "sd-100m", \ 33 "sd-40m", \ 34 "sd-25m", \ 35 "sd-22m", \ 36 }, \ 37 .num_parents = 8, \ 38 .reg = 0x30 + 0x200 * (ch), \ 39 .masks = { \ 40 0x00031000, \ 41 0x00031000, \ 42 0x00031000, \ 43 0x00031000, \ 44 0x00001300, \ 45 0x00001300, \ 46 0x00001300, \ 47 0x00001300, \ 48 }, \ 49 .vals = { \ 50 0x00000000, \ 51 0x00010000, \ 52 0x00020000, \ 53 0x00030000, \ 54 0x00001000, \ 55 0x00001100, \ 56 0x00001200, \ 57 0x00001300, \ 58 }, \ 59 }, \ 60 }, \ 61 UNIPHIER_CLK_GATE("sd" #ch, (_idx), "sd" #ch "-sel", 0x20 + 0x200 * (ch), 8) 62 63 #define UNIPHIER_MIO_CLK_USB2(idx, ch) \ 64 UNIPHIER_CLK_GATE("usb2" #ch, (idx), "usb2", 0x20 + 0x200 * (ch), 28) 65 66 #define UNIPHIER_MIO_CLK_USB2_PHY(idx, ch) \ 67 UNIPHIER_CLK_GATE("usb2" #ch "-phy", (idx), "usb2", 0x20 + 0x200 * (ch), 29) 68 69 const struct uniphier_clk_data uniphier_ld4_mio_clk_data[] = { 70 UNIPHIER_MIO_CLK_SD_FIXED, 71 UNIPHIER_MIO_CLK_SD(0, 0), 72 UNIPHIER_MIO_CLK_SD(1, 1), 73 UNIPHIER_MIO_CLK_SD(2, 2), 74 UNIPHIER_CLK_GATE("miodmac", 7, NULL, 0x20, 25), 75 UNIPHIER_MIO_CLK_USB2(8, 0), 76 UNIPHIER_MIO_CLK_USB2(9, 1), 77 UNIPHIER_MIO_CLK_USB2(10, 2), 78 UNIPHIER_MIO_CLK_USB2_PHY(12, 0), 79 UNIPHIER_MIO_CLK_USB2_PHY(13, 1), 80 UNIPHIER_MIO_CLK_USB2_PHY(14, 2), 81 { /* sentinel */ } 82 }; 83 84 const struct uniphier_clk_data uniphier_pro5_sd_clk_data[] = { 85 UNIPHIER_MIO_CLK_SD_FIXED, 86 UNIPHIER_MIO_CLK_SD(0, 0), 87 UNIPHIER_MIO_CLK_SD(1, 1), 88 { /* sentinel */ } 89 }; 90