Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.5 120 lines 3.0 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. 4 */ 5 6#ifndef __DSI_PLL_H__ 7#define __DSI_PLL_H__ 8 9#include <linux/clk-provider.h> 10#include <linux/delay.h> 11 12#include "dsi.h" 13 14#define NUM_DSI_CLOCKS_MAX 6 15#define MAX_DSI_PLL_EN_SEQS 10 16 17struct msm_dsi_pll { 18 enum msm_dsi_phy_type type; 19 20 struct clk_hw clk_hw; 21 bool pll_on; 22 bool state_saved; 23 24 unsigned long min_rate; 25 unsigned long max_rate; 26 u32 en_seq_cnt; 27 28 int (*enable_seqs[MAX_DSI_PLL_EN_SEQS])(struct msm_dsi_pll *pll); 29 void (*disable_seq)(struct msm_dsi_pll *pll); 30 int (*get_provider)(struct msm_dsi_pll *pll, 31 struct clk **byte_clk_provider, 32 struct clk **pixel_clk_provider); 33 void (*destroy)(struct msm_dsi_pll *pll); 34 void (*save_state)(struct msm_dsi_pll *pll); 35 int (*restore_state)(struct msm_dsi_pll *pll); 36 int (*set_usecase)(struct msm_dsi_pll *pll, 37 enum msm_dsi_phy_usecase uc); 38}; 39 40#define hw_clk_to_pll(x) container_of(x, struct msm_dsi_pll, clk_hw) 41 42static inline void pll_write(void __iomem *reg, u32 data) 43{ 44 msm_writel(data, reg); 45} 46 47static inline u32 pll_read(const void __iomem *reg) 48{ 49 return msm_readl(reg); 50} 51 52static inline void pll_write_udelay(void __iomem *reg, u32 data, u32 delay_us) 53{ 54 pll_write(reg, data); 55 udelay(delay_us); 56} 57 58static inline void pll_write_ndelay(void __iomem *reg, u32 data, u32 delay_ns) 59{ 60 pll_write((reg), data); 61 ndelay(delay_ns); 62} 63 64/* 65 * DSI PLL Helper functions 66 */ 67 68/* clock callbacks */ 69long msm_dsi_pll_helper_clk_round_rate(struct clk_hw *hw, 70 unsigned long rate, unsigned long *parent_rate); 71int msm_dsi_pll_helper_clk_prepare(struct clk_hw *hw); 72void msm_dsi_pll_helper_clk_unprepare(struct clk_hw *hw); 73/* misc */ 74void msm_dsi_pll_helper_unregister_clks(struct platform_device *pdev, 75 struct clk **clks, u32 num_clks); 76 77/* 78 * Initialization for Each PLL Type 79 */ 80#ifdef CONFIG_DRM_MSM_DSI_28NM_PHY 81struct msm_dsi_pll *msm_dsi_pll_28nm_init(struct platform_device *pdev, 82 enum msm_dsi_phy_type type, int id); 83#else 84static inline struct msm_dsi_pll *msm_dsi_pll_28nm_init( 85 struct platform_device *pdev, enum msm_dsi_phy_type type, int id) 86{ 87 return ERR_PTR(-ENODEV); 88} 89#endif 90#ifdef CONFIG_DRM_MSM_DSI_28NM_8960_PHY 91struct msm_dsi_pll *msm_dsi_pll_28nm_8960_init(struct platform_device *pdev, 92 int id); 93#else 94static inline struct msm_dsi_pll *msm_dsi_pll_28nm_8960_init( 95 struct platform_device *pdev, int id) 96{ 97 return ERR_PTR(-ENODEV); 98} 99#endif 100 101#ifdef CONFIG_DRM_MSM_DSI_14NM_PHY 102struct msm_dsi_pll *msm_dsi_pll_14nm_init(struct platform_device *pdev, int id); 103#else 104static inline struct msm_dsi_pll * 105msm_dsi_pll_14nm_init(struct platform_device *pdev, int id) 106{ 107 return ERR_PTR(-ENODEV); 108} 109#endif 110#ifdef CONFIG_DRM_MSM_DSI_10NM_PHY 111struct msm_dsi_pll *msm_dsi_pll_10nm_init(struct platform_device *pdev, int id); 112#else 113static inline struct msm_dsi_pll * 114msm_dsi_pll_10nm_init(struct platform_device *pdev, int id) 115{ 116 return ERR_PTR(-ENODEV); 117} 118#endif 119#endif /* __DSI_PLL_H__ */ 120