#include <media/videobuf2-core.h>
#include <media/v4l2-mem2mem.h>
+#include <soc/bcm2835/raspberrypi-firmware.h>
+
#include "rpivid.h"
#include "rpivid_hw.h"
int rpivid_hw_probe(struct rpivid_dev *dev)
{
+ struct rpi_firmware *firmware;
+ struct device_node *node;
struct resource *res;
__u32 irq_stat;
int irq_dec;
if (IS_ERR(dev->clock))
return PTR_ERR(dev->clock);
+ node = rpi_firmware_find_node();
+ if (!node)
+ return -EINVAL;
+
+ firmware = rpi_firmware_get(node);
+ of_node_put(node);
+ if (!firmware)
+ return -EPROBE_DEFER;
+
+ dev->max_clock_rate = rpi_firmware_clk_get_max_rate(firmware,
+ RPI_FIRMWARE_HEVC_CLK_ID);
+ rpi_firmware_put(firmware);
+
dev->cache_align = dma_get_cache_alignment();
// Disable IRQs & reset anything pending
/* Always starts the clock if it isn't already on this ctx */
static int start_clock(struct rpivid_dev *dev, struct rpivid_ctx *ctx)
{
- long max_hevc_clock;
int rv;
- max_hevc_clock = clk_get_max_rate(dev->clock);
-
- rv = clk_set_min_rate(dev->clock, max_hevc_clock);
+ rv = clk_set_min_rate(dev->clock, dev->max_clock_rate);
if (rv) {
dev_err(dev->dev, "Failed to set clock rate\n");
return rv;