cregit-Linux how code gets into the kernel

Release 4.17 drivers/gpu/drm/omapdrm/dss/hdmi_pll.c

/*
 * HDMI PLL
 *
 * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published by
 * the Free Software Foundation.
 */


#define DSS_SUBSYS_NAME "HDMIPLL"

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/platform_device.h>
#include <linux/clk.h>
#include <linux/seq_file.h>
#include <linux/pm_runtime.h>

#include "omapdss.h"
#include "dss.h"
#include "hdmi.h"


void hdmi_pll_dump(struct hdmi_pll_data *pll, struct seq_file *s) { #define DUMPPLL(r) seq_printf(s, "%-35s %08x\n", #r,\ hdmi_read_reg(pll->base, r)) DUMPPLL(PLLCTRL_PLL_CONTROL); DUMPPLL(PLLCTRL_PLL_STATUS); DUMPPLL(PLLCTRL_PLL_GO); DUMPPLL(PLLCTRL_CFG1); DUMPPLL(PLLCTRL_CFG2); DUMPPLL(PLLCTRL_CFG3); DUMPPLL(PLLCTRL_SSC_CFG1); DUMPPLL(PLLCTRL_SSC_CFG2); DUMPPLL(PLLCTRL_CFG4); }

Contributors

PersonTokensPropCommitsCommitProp
Archit Taneja67100.00%1100.00%
Total67100.00%1100.00%


static int hdmi_pll_enable(struct dss_pll *dsspll) { struct hdmi_pll_data *pll = container_of(dsspll, struct hdmi_pll_data, pll); struct hdmi_wp_data *wp = pll->wp; int r; r = pm_runtime_get_sync(&pll->pdev->dev); WARN_ON(r < 0); dss_ctrl_pll_enable(dsspll, true); r = hdmi_wp_set_pll_pwr(wp, HDMI_PLLPWRCMD_BOTHON_ALLCLKS); if (r) return r; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Tomi Valkeinen5869.88%571.43%
Archit Taneja2428.92%114.29%
Laurent Pinchart11.20%114.29%
Total83100.00%7100.00%


static void hdmi_pll_disable(struct dss_pll *dsspll) { struct hdmi_pll_data *pll = container_of(dsspll, struct hdmi_pll_data, pll); struct hdmi_wp_data *wp = pll->wp; int r; hdmi_wp_set_pll_pwr(wp, HDMI_PLLPWRCMD_ALLOFF); dss_ctrl_pll_enable(dsspll, false); r = pm_runtime_put_sync(&pll->pdev->dev); WARN_ON(r < 0 && r != -ENOSYS); }

Contributors

PersonTokensPropCommitsCommitProp
Tomi Valkeinen6686.84%466.67%
Archit Taneja911.84%116.67%
Laurent Pinchart11.32%116.67%
Total76100.00%6100.00%

static const struct dss_pll_ops hdmi_pll_ops = { .enable = hdmi_pll_enable, .disable = hdmi_pll_disable, .set_config = dss_pll_write_config_type_b, }; static const struct dss_pll_hw dss_omap4_hdmi_pll_hw = { .type = DSS_PLL_TYPE_B, .n_max = 255, .m_min = 20, .m_max = 4095, .mX_max = 127, .fint_min = 500000, .fint_max = 2500000, .clkdco_min = 500000000, .clkdco_low = 1000000000, .clkdco_max = 2000000000, .n_msb = 8, .n_lsb = 1, .m_msb = 20, .m_lsb = 9, .mX_msb[0] = 24, .mX_lsb[0] = 18, .has_selfreqdco = true, }; static const struct dss_pll_hw dss_omap5_hdmi_pll_hw = { .type = DSS_PLL_TYPE_B, .n_max = 255, .m_min = 20, .m_max = 2045, .mX_max = 127, .fint_min = 620000, .fint_max = 2500000, .clkdco_min = 750000000, .clkdco_low = 1500000000, .clkdco_max = 2500000000UL, .n_msb = 8, .n_lsb = 1, .m_msb = 20, .m_lsb = 9, .mX_msb[0] = 24, .mX_lsb[0] = 18, .has_selfreqdco = true, .has_refsel = true, };
static int hdmi_init_pll_data(struct dss_device *dss, struct platform_device *pdev, struct hdmi_pll_data *hpll) { struct dss_pll *pll = &hpll->pll; struct clk *clk; int r; clk = devm_clk_get(&pdev->dev, "sys_clk"); if (IS_ERR(clk)) { DSSERR("can't get sys_clk\n"); return PTR_ERR(clk); } pll->name = "hdmi"; pll->id = DSS_PLL_HDMI; pll->base = hpll->base; pll->clkin = clk; if (hpll->wp->version == 4) pll->hw = &dss_omap4_hdmi_pll_hw; else pll->hw = &dss_omap5_hdmi_pll_hw; pll->ops = &hdmi_pll_ops; r = dss_pll_register(dss, pll); if (r) return r; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Tomi Valkeinen8154.73%228.57%
Archit Taneja4933.11%114.29%
Laurent Pinchart1812.16%457.14%
Total148100.00%7100.00%


int hdmi_pll_init(struct dss_device *dss, struct platform_device *pdev, struct hdmi_pll_data *pll, struct hdmi_wp_data *wp) { int r; struct resource *res; pll->pdev = pdev; pll->wp = wp; res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pll"); pll->base = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(pll->base)) return PTR_ERR(pll->base); r = hdmi_init_pll_data(dss, pdev, pll); if (r) { DSSERR("failed to init HDMI PLL\n"); return r; } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Archit Taneja5749.57%220.00%
Tomi Valkeinen5043.48%660.00%
Laurent Pinchart86.96%220.00%
Total115100.00%10100.00%


void hdmi_pll_uninit(struct hdmi_pll_data *hpll) { struct dss_pll *pll = &hpll->pll; dss_pll_unregister(pll); }

Contributors

PersonTokensPropCommitsCommitProp
Tomi Valkeinen25100.00%1100.00%
Total25100.00%1100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Tomi Valkeinen44657.33%1354.17%
Archit Taneja29838.30%312.50%
Laurent Pinchart293.73%520.83%
Arnd Bergmann30.39%14.17%
Peter Ujfalusi10.13%14.17%
Andrew F. Davis10.13%14.17%
Total778100.00%24100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.