media: ccs: Generate V4L2 CCI compliant register definitions
Generate register definitions that are fit for use with V4L2 CCI. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
parent
cd93cc245d
commit
5d6ce399d9
@ -82,14 +82,6 @@ for my $fh ($H, $LH) {
|
||||
print $fh "/* $license */\n$copyright$note\n";
|
||||
}
|
||||
|
||||
sub bit_def($) {
|
||||
my $bit = shift @_;
|
||||
|
||||
return "BIT($bit)" if defined $kernel;
|
||||
return "(1U << $bit)" if $bit =~ /^[a-zA-Z0-9_]+$/;
|
||||
return "(1U << ($bit))";
|
||||
}
|
||||
|
||||
print $H <<EOF
|
||||
#ifndef __${uc_header}__
|
||||
#define __${uc_header}__
|
||||
@ -97,23 +89,63 @@ print $H <<EOF
|
||||
EOF
|
||||
;
|
||||
|
||||
print $H "#include <linux/bits.h>\n\n" if defined $kernel;
|
||||
|
||||
print $H <<EOF
|
||||
#define CCS_FL_BASE 16
|
||||
#include <linux/bits.h>
|
||||
|
||||
#include <media/v4l2-cci.h>
|
||||
|
||||
EOF
|
||||
;
|
||||
if defined $kernel;
|
||||
|
||||
print $H "#define CCS_FL_16BIT " . bit_def("CCS_FL_BASE") . "\n";
|
||||
print $H "#define CCS_FL_32BIT " . bit_def("CCS_FL_BASE + 1") . "\n";
|
||||
print $H "#define CCS_FL_FLOAT_IREAL " . bit_def("CCS_FL_BASE + 2") . "\n";
|
||||
print $H "#define CCS_FL_IREAL " . bit_def("CCS_FL_BASE + 3") . "\n";
|
||||
print $H "#define CCS_FL_BASE " .
|
||||
(defined $kernel ? "CCI_REG_PRIVATE_SHIFT" : 16) . "\n";
|
||||
|
||||
my $flag = -1;
|
||||
my $all_flags;
|
||||
|
||||
sub bit_def($) {
|
||||
my $bit = shift @_;
|
||||
|
||||
if (defined $kernel) {
|
||||
return "BIT$bit" if $bit =~ /^\(.*\)$/;
|
||||
return "BIT($bit)";
|
||||
}
|
||||
return "(1U << $bit)";
|
||||
}
|
||||
|
||||
sub flag_str($$) {
|
||||
my ($flag, $check) = @_;
|
||||
|
||||
$$flag++;
|
||||
|
||||
my $flag_str = !$$flag ? "CCS_FL_BASE" : "(CCS_FL_BASE + $$flag)";
|
||||
|
||||
$flag_str = bit_def($flag_str);
|
||||
|
||||
$$check .= " | " if defined $$check;
|
||||
|
||||
$$check .= $flag_str;
|
||||
|
||||
return $flag_str;
|
||||
}
|
||||
|
||||
if (! defined $kernel) {
|
||||
print $H "#define CCS_FL_16BIT " . flag_str(\$flag, \$all_flags) . "\n";
|
||||
print $H "#define CCS_FL_32BIT " . flag_str(\$flag, \$all_flags) . "\n";
|
||||
}
|
||||
|
||||
print $H "#define CCS_FL_FLOAT_IREAL " . flag_str(\$flag, \$all_flags) . "\n";
|
||||
print $H "#define CCS_FL_IREAL " . flag_str(\$flag, \$all_flags) . "\n";
|
||||
print $H "#define CCS_BUILD_BUG \\
|
||||
BUILD_BUG_ON(~CCI_REG_PRIVATE_MASK & ($all_flags))\n"
|
||||
if defined $kernel;
|
||||
|
||||
print $H <<EOF
|
||||
|
||||
#define CCS_R_ADDR(r) ((r) & 0xffff)
|
||||
|
||||
EOF
|
||||
;
|
||||
if ! defined $kernel;
|
||||
|
||||
print $A <<EOF
|
||||
#include <stdint.h>
|
||||
@ -189,12 +221,12 @@ sub tabconv($) {
|
||||
return (join "\n", @l) . "\n";
|
||||
}
|
||||
|
||||
sub elem_size(@) {
|
||||
sub elem_bits(@) {
|
||||
my @flags = @_;
|
||||
|
||||
return 2 if grep /^16$/, @flags;
|
||||
return 4 if grep /^32$/, @flags;
|
||||
return 1;
|
||||
return 16 if grep /^16$/, @flags;
|
||||
return 32 if grep /^32$/, @flags;
|
||||
return 8;
|
||||
}
|
||||
|
||||
sub arr_size($) {
|
||||
@ -296,9 +328,13 @@ while (<$R>) {
|
||||
|
||||
next if $#{$this{args}} + 1 != scalar keys %{$this{argparams}};
|
||||
|
||||
my $reg_formula = "($this{addr}";
|
||||
my $reg_formula = "$this{addr}";
|
||||
my $lim_formula;
|
||||
|
||||
chop $reg_formula;
|
||||
|
||||
$reg_formula = "(" . $reg_formula if $this{flagstring} ne "";
|
||||
|
||||
foreach my $arg (@{$this{args}}) {
|
||||
my $d = $h->{$arg}->{discontig};
|
||||
my $times = $h->{$arg}->{elsize} != 1 ?
|
||||
@ -315,11 +351,13 @@ while (<$R>) {
|
||||
$lim_formula .= (defined $lim_formula ? " + " : "") . "($arg)$times";
|
||||
}
|
||||
|
||||
$reg_formula .= ")\n";
|
||||
$reg_formula .= ")";
|
||||
$lim_formula =~ s/^\(([a-z0-9]+)\)$/$1/i;
|
||||
|
||||
print $H tabconv sprintf("#define %-62s %s", "CCS_R_" . (uc $this{name}) .
|
||||
$this{arglist}, $reg_formula);
|
||||
$this{arglist}, $reg_formula .
|
||||
(($this{flagstring} eq "") ? "" :
|
||||
" | " . $this{flagstring} . ")") . "\n");
|
||||
|
||||
print $H tabconv $hdr_data;
|
||||
undef $hdr_data;
|
||||
@ -369,16 +407,23 @@ while (<$R>) {
|
||||
$name =~ s/[,\.-]/_/g;
|
||||
|
||||
my $flagstring = "";
|
||||
my $size = elem_size(@flags);
|
||||
$flagstring .= "| CCS_FL_16BIT " if $size eq "2";
|
||||
$flagstring .= "| CCS_FL_32BIT " if $size eq "4";
|
||||
my $bits = elem_bits(@flags);
|
||||
if (! defined $kernel) {
|
||||
$flagstring .= "| CCS_FL_16BIT " if $bits == 16;
|
||||
$flagstring .= "| CCS_FL_32BIT " if $bits == 32;
|
||||
}
|
||||
$flagstring .= "| CCS_FL_FLOAT_IREAL " if grep /^float_ireal$/, @flags;
|
||||
$flagstring .= "| CCS_FL_IREAL " if grep /^ireal$/, @flags;
|
||||
$flagstring =~ s/^\| //;
|
||||
$flagstring =~ s/ $//;
|
||||
$flagstring = "($flagstring)" if $flagstring =~ /\|/;
|
||||
my $base_addr = $addr;
|
||||
$addr = "($addr | $flagstring)" if $flagstring ne "";
|
||||
$addr = "CCI_REG$bits($addr)" if defined $kernel;
|
||||
|
||||
if ($flagstring ne "" && !@$args) {
|
||||
$addr = "($addr | $flagstring)";
|
||||
$flagstring = "";
|
||||
}
|
||||
|
||||
my $arglist = @$args ? "(" . (join ", ", @$args) . ")" : "";
|
||||
$hdr_data .= sprintf "#define %-62s %s\n", "CCS_R_" . (uc $name), $addr
|
||||
@ -388,11 +433,12 @@ while (<$R>) {
|
||||
|
||||
%this = ( name => $name,
|
||||
addr => $addr,
|
||||
flagstring => $flagstring,
|
||||
base_addr => $base_addr,
|
||||
argparams => {},
|
||||
args => $args,
|
||||
arglist => $arglist,
|
||||
elsize => $size,
|
||||
elsize => $bits / 8,
|
||||
);
|
||||
|
||||
if (!@$args) {
|
||||
|
Loading…
Reference in New Issue
Block a user