#include <linux/clkdev.h>
#include <linux/clk-provider.h>
#include <linux/io.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <soc/bcm2835/raspberrypi-firmware.h>
static char *rpi_firmware_clk_names[] = …;
#define RPI_FIRMWARE_STATE_ENABLE_BIT …
#define RPI_FIRMWARE_STATE_WAIT_BIT …
struct raspberrypi_clk_variant;
struct raspberrypi_clk { … };
struct raspberrypi_clk_data { … };
struct raspberrypi_clk_variant { … };
static struct raspberrypi_clk_variant
raspberrypi_clk_variants[RPI_FIRMWARE_NUM_CLK_ID] = …;
struct raspberrypi_firmware_prop { … } __packed;
static int raspberrypi_clock_property(struct rpi_firmware *firmware,
const struct raspberrypi_clk_data *data,
u32 tag, u32 *val)
{ … }
static int raspberrypi_fw_is_prepared(struct clk_hw *hw)
{ … }
static unsigned long raspberrypi_fw_get_rate(struct clk_hw *hw,
unsigned long parent_rate)
{ … }
static int raspberrypi_fw_set_rate(struct clk_hw *hw, unsigned long rate,
unsigned long parent_rate)
{ … }
static int raspberrypi_fw_dumb_determine_rate(struct clk_hw *hw,
struct clk_rate_request *req)
{ … }
static const struct clk_ops raspberrypi_firmware_clk_ops = …;
static struct clk_hw *raspberrypi_clk_register(struct raspberrypi_clk *rpi,
unsigned int parent,
unsigned int id,
struct raspberrypi_clk_variant *variant)
{ … }
struct rpi_firmware_get_clocks_response { … };
static int raspberrypi_discover_clocks(struct raspberrypi_clk *rpi,
struct clk_hw_onecell_data *data)
{ … }
static int raspberrypi_clk_probe(struct platform_device *pdev)
{ … }
static void raspberrypi_clk_remove(struct platform_device *pdev)
{ … }
static const struct of_device_id raspberrypi_clk_match[] = …;
MODULE_DEVICE_TABLE(of, raspberrypi_clk_match);
static struct platform_driver raspberrypi_clk_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_ALIAS(…) …;