Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/drivers/clk/versatile/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  clk-versatile.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Clock driver for the ARM Integrator/AP, Integrator/CP, Versatile AB and
 * Versatile PB boards.
 * Copyright (C) 2012 Linus Walleij
 */

#include <linux/clk-provider.h>
#include <linux/err.h>
#include <linux/of.h>
#include <linux/of_address.h>

#include "icst.h"
#include "clk-icst.h"

#define INTEGRATOR_HDR_LOCK_OFFSET 0x14

#define VERSATILE_SYS_OSCCLCD_OFFSET 0x1c
#define VERSATILE_SYS_LOCK_OFFSET 0x20

/* Base offset for the core module */
static void __iomem *cm_base;

static const struct icst_params cp_auxosc_params = {
 .vco_max = ICST525_VCO_MAX_5V,
 .vco_min = ICST525_VCO_MIN,
 .vd_min  = 8,
 .vd_max  = 263,
 .rd_min  = 3,
 .rd_max  = 65,
 .s2div  = icst525_s2div,
 .idx2s  = icst525_idx2s,
};

static const struct clk_icst_desc cm_auxosc_desc __initconst = {
 .params = &cp_auxosc_params,
 .vco_offset = 0x1c,
 .lock_offset = INTEGRATOR_HDR_LOCK_OFFSET,
};

static const struct icst_params versatile_auxosc_params = {
 .vco_max = ICST307_VCO_MAX,
 .vco_min = ICST307_VCO_MIN,
 .vd_min  = 4 + 8,
 .vd_max  = 511 + 8,
 .rd_min  = 1 + 2,
 .rd_max  = 127 + 2,
 .s2div  = icst307_s2div,
 .idx2s  = icst307_idx2s,
};

static const struct clk_icst_desc versatile_auxosc_desc __initconst = {
 .params = &versatile_auxosc_params,
 .vco_offset = VERSATILE_SYS_OSCCLCD_OFFSET,
 .lock_offset = VERSATILE_SYS_LOCK_OFFSET,
};
static void __init cm_osc_setup(struct device_node *np,
    const struct clk_icst_desc *desc)
{
 struct clk *clk;
 const char *clk_name = np->name;
 const char *parent_name;

 if (!cm_base) {
  /* Remap the core module base if not done yet */
  struct device_node *parent;

  parent = of_get_parent(np);
  if (!parent) {
   pr_err("no parent on core module clock\n");
   return;
  }
  cm_base = of_iomap(parent, 0);
  of_node_put(parent);
  if (!cm_base) {
   pr_err("could not remap core module base\n");
   return;
  }
 }

 parent_name = of_clk_get_parent_name(np, 0);
 clk = icst_clk_register(NULL, desc, clk_name, parent_name, cm_base);
 if (!IS_ERR(clk))
  of_clk_add_provider(np, of_clk_src_simple_get, clk);
}

static void __init of_integrator_cm_osc_setup(struct device_node *np)
{
 cm_osc_setup(np, &cm_auxosc_desc);
}
CLK_OF_DECLARE(integrator_cm_auxosc_clk,
 "arm,integrator-cm-auxosc", of_integrator_cm_osc_setup);

static void __init of_versatile_cm_osc_setup(struct device_node *np)
{
 cm_osc_setup(np, &versatile_auxosc_desc);
}
CLK_OF_DECLARE(versatile_cm_auxosc_clk,
        "arm,versatile-cm-auxosc", of_versatile_cm_osc_setup);

Messung V0.5
C=96 H=100 G=97

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.