162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2016 Socionext Inc. 462306a36Sopenharmony_ci * Author: Masahiro Yamada <yamada.masahiro@socionext.com> 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include <linux/stddef.h> 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include "clk-uniphier.h" 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#define UNIPHIER_MIO_CLK_SD_FIXED \ 1262306a36Sopenharmony_ci UNIPHIER_CLK_FACTOR("sd-44m", -1, "sd-133m", 1, 3), \ 1362306a36Sopenharmony_ci UNIPHIER_CLK_FACTOR("sd-33m", -1, "sd-200m", 1, 6), \ 1462306a36Sopenharmony_ci UNIPHIER_CLK_FACTOR("sd-50m", -1, "sd-200m", 1, 4), \ 1562306a36Sopenharmony_ci UNIPHIER_CLK_FACTOR("sd-67m", -1, "sd-200m", 1, 3), \ 1662306a36Sopenharmony_ci UNIPHIER_CLK_FACTOR("sd-100m", -1, "sd-200m", 1, 2), \ 1762306a36Sopenharmony_ci UNIPHIER_CLK_FACTOR("sd-40m", -1, "sd-200m", 1, 5), \ 1862306a36Sopenharmony_ci UNIPHIER_CLK_FACTOR("sd-25m", -1, "sd-200m", 1, 8), \ 1962306a36Sopenharmony_ci UNIPHIER_CLK_FACTOR("sd-22m", -1, "sd-133m", 1, 6) 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define UNIPHIER_MIO_CLK_SD(_idx, ch) \ 2262306a36Sopenharmony_ci { \ 2362306a36Sopenharmony_ci .name = "sd" #ch "-sel", \ 2462306a36Sopenharmony_ci .type = UNIPHIER_CLK_TYPE_MUX, \ 2562306a36Sopenharmony_ci .idx = -1, \ 2662306a36Sopenharmony_ci .data.mux = { \ 2762306a36Sopenharmony_ci .parent_names = { \ 2862306a36Sopenharmony_ci "sd-44m", \ 2962306a36Sopenharmony_ci "sd-33m", \ 3062306a36Sopenharmony_ci "sd-50m", \ 3162306a36Sopenharmony_ci "sd-67m", \ 3262306a36Sopenharmony_ci "sd-100m", \ 3362306a36Sopenharmony_ci "sd-40m", \ 3462306a36Sopenharmony_ci "sd-25m", \ 3562306a36Sopenharmony_ci "sd-22m", \ 3662306a36Sopenharmony_ci }, \ 3762306a36Sopenharmony_ci .num_parents = 8, \ 3862306a36Sopenharmony_ci .reg = 0x30 + 0x200 * (ch), \ 3962306a36Sopenharmony_ci .masks = { \ 4062306a36Sopenharmony_ci 0x00031000, \ 4162306a36Sopenharmony_ci 0x00031000, \ 4262306a36Sopenharmony_ci 0x00031000, \ 4362306a36Sopenharmony_ci 0x00031000, \ 4462306a36Sopenharmony_ci 0x00001300, \ 4562306a36Sopenharmony_ci 0x00001300, \ 4662306a36Sopenharmony_ci 0x00001300, \ 4762306a36Sopenharmony_ci 0x00001300, \ 4862306a36Sopenharmony_ci }, \ 4962306a36Sopenharmony_ci .vals = { \ 5062306a36Sopenharmony_ci 0x00000000, \ 5162306a36Sopenharmony_ci 0x00010000, \ 5262306a36Sopenharmony_ci 0x00020000, \ 5362306a36Sopenharmony_ci 0x00030000, \ 5462306a36Sopenharmony_ci 0x00001000, \ 5562306a36Sopenharmony_ci 0x00001100, \ 5662306a36Sopenharmony_ci 0x00001200, \ 5762306a36Sopenharmony_ci 0x00001300, \ 5862306a36Sopenharmony_ci }, \ 5962306a36Sopenharmony_ci }, \ 6062306a36Sopenharmony_ci }, \ 6162306a36Sopenharmony_ci UNIPHIER_CLK_GATE("sd" #ch, (_idx), "sd" #ch "-sel", 0x20 + 0x200 * (ch), 8) 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci#define UNIPHIER_MIO_CLK_USB2(idx, ch) \ 6462306a36Sopenharmony_ci UNIPHIER_CLK_GATE("usb2" #ch, (idx), "usb2", 0x20 + 0x200 * (ch), 28) 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci#define UNIPHIER_MIO_CLK_USB2_PHY(idx, ch) \ 6762306a36Sopenharmony_ci UNIPHIER_CLK_GATE("usb2" #ch "-phy", (idx), "usb2", 0x20 + 0x200 * (ch), 29) 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ciconst struct uniphier_clk_data uniphier_ld4_mio_clk_data[] = { 7062306a36Sopenharmony_ci UNIPHIER_MIO_CLK_SD_FIXED, 7162306a36Sopenharmony_ci UNIPHIER_MIO_CLK_SD(0, 0), 7262306a36Sopenharmony_ci UNIPHIER_MIO_CLK_SD(1, 1), 7362306a36Sopenharmony_ci UNIPHIER_MIO_CLK_SD(2, 2), 7462306a36Sopenharmony_ci UNIPHIER_CLK_GATE("miodmac", 7, NULL, 0x20, 25), 7562306a36Sopenharmony_ci UNIPHIER_MIO_CLK_USB2(8, 0), 7662306a36Sopenharmony_ci UNIPHIER_MIO_CLK_USB2(9, 1), 7762306a36Sopenharmony_ci UNIPHIER_MIO_CLK_USB2(10, 2), 7862306a36Sopenharmony_ci UNIPHIER_MIO_CLK_USB2_PHY(12, 0), 7962306a36Sopenharmony_ci UNIPHIER_MIO_CLK_USB2_PHY(13, 1), 8062306a36Sopenharmony_ci UNIPHIER_MIO_CLK_USB2_PHY(14, 2), 8162306a36Sopenharmony_ci { /* sentinel */ } 8262306a36Sopenharmony_ci}; 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ciconst struct uniphier_clk_data uniphier_pro5_sd_clk_data[] = { 8562306a36Sopenharmony_ci UNIPHIER_MIO_CLK_SD_FIXED, 8662306a36Sopenharmony_ci UNIPHIER_MIO_CLK_SD(0, 0), 8762306a36Sopenharmony_ci UNIPHIER_MIO_CLK_SD(1, 1), 8862306a36Sopenharmony_ci { /* sentinel */ } 8962306a36Sopenharmony_ci}; 90