Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Sakari Ailus and committed by
Hans Verkuil
5d6ce399 cd93cc24

+75 -29
+75 -29
Documentation/driver-api/media/drivers/ccs/mk-ccs-regs
··· 82 82 print $fh "/* $license */\n$copyright$note\n"; 83 83 } 84 84 85 - sub bit_def($) { 86 - my $bit = shift @_; 87 - 88 - return "BIT($bit)" if defined $kernel; 89 - return "(1U << $bit)" if $bit =~ /^[a-zA-Z0-9_]+$/; 90 - return "(1U << ($bit))"; 91 - } 92 - 93 85 print $H <<EOF 94 86 #ifndef __${uc_header}__ 95 87 #define __${uc_header}__ ··· 89 97 EOF 90 98 ; 91 99 92 - print $H "#include <linux/bits.h>\n\n" if defined $kernel; 93 - 94 100 print $H <<EOF 95 - #define CCS_FL_BASE 16 101 + #include <linux/bits.h> 102 + 103 + #include <media/v4l2-cci.h> 104 + 96 105 EOF 97 - ; 106 + if defined $kernel; 98 107 99 - print $H "#define CCS_FL_16BIT " . bit_def("CCS_FL_BASE") . "\n"; 100 - print $H "#define CCS_FL_32BIT " . bit_def("CCS_FL_BASE + 1") . "\n"; 101 - print $H "#define CCS_FL_FLOAT_IREAL " . bit_def("CCS_FL_BASE + 2") . "\n"; 102 - print $H "#define CCS_FL_IREAL " . bit_def("CCS_FL_BASE + 3") . "\n"; 108 + print $H "#define CCS_FL_BASE " . 109 + (defined $kernel ? "CCI_REG_PRIVATE_SHIFT" : 16) . "\n"; 110 + 111 + my $flag = -1; 112 + my $all_flags; 113 + 114 + sub bit_def($) { 115 + my $bit = shift @_; 116 + 117 + if (defined $kernel) { 118 + return "BIT$bit" if $bit =~ /^\(.*\)$/; 119 + return "BIT($bit)"; 120 + } 121 + return "(1U << $bit)"; 122 + } 123 + 124 + sub flag_str($$) { 125 + my ($flag, $check) = @_; 126 + 127 + $$flag++; 128 + 129 + my $flag_str = !$$flag ? "CCS_FL_BASE" : "(CCS_FL_BASE + $$flag)"; 130 + 131 + $flag_str = bit_def($flag_str); 132 + 133 + $$check .= " | " if defined $$check; 134 + 135 + $$check .= $flag_str; 136 + 137 + return $flag_str; 138 + } 139 + 140 + if (! defined $kernel) { 141 + print $H "#define CCS_FL_16BIT " . flag_str(\$flag, \$all_flags) . "\n"; 142 + print $H "#define CCS_FL_32BIT " . flag_str(\$flag, \$all_flags) . "\n"; 143 + } 144 + 145 + print $H "#define CCS_FL_FLOAT_IREAL " . flag_str(\$flag, \$all_flags) . "\n"; 146 + print $H "#define CCS_FL_IREAL " . flag_str(\$flag, \$all_flags) . "\n"; 147 + print $H "#define CCS_BUILD_BUG \\ 148 + BUILD_BUG_ON(~CCI_REG_PRIVATE_MASK & ($all_flags))\n" 149 + if defined $kernel; 103 150 104 151 print $H <<EOF 152 + 105 153 #define CCS_R_ADDR(r) ((r) & 0xffff) 106 154 107 155 EOF 108 - ; 156 + if ! defined $kernel; 109 157 110 158 print $A <<EOF 111 159 #include <stdint.h> ··· 221 189 return (join "\n", @l) . "\n"; 222 190 } 223 191 224 - sub elem_size(@) { 192 + sub elem_bits(@) { 225 193 my @flags = @_; 226 194 227 - return 2 if grep /^16$/, @flags; 228 - return 4 if grep /^32$/, @flags; 229 - return 1; 195 + return 16 if grep /^16$/, @flags; 196 + return 32 if grep /^32$/, @flags; 197 + return 8; 230 198 } 231 199 232 200 sub arr_size($) { ··· 328 296 329 297 next if $#{$this{args}} + 1 != scalar keys %{$this{argparams}}; 330 298 331 - my $reg_formula = "($this{addr}"; 299 + my $reg_formula = "$this{addr}"; 332 300 my $lim_formula; 301 + 302 + chop $reg_formula; 303 + 304 + $reg_formula = "(" . $reg_formula if $this{flagstring} ne ""; 333 305 334 306 foreach my $arg (@{$this{args}}) { 335 307 my $d = $h->{$arg}->{discontig}; ··· 351 315 $lim_formula .= (defined $lim_formula ? " + " : "") . "($arg)$times"; 352 316 } 353 317 354 - $reg_formula .= ")\n"; 318 + $reg_formula .= ")"; 355 319 $lim_formula =~ s/^\(([a-z0-9]+)\)$/$1/i; 356 320 357 321 print $H tabconv sprintf("#define %-62s %s", "CCS_R_" . (uc $this{name}) . 358 - $this{arglist}, $reg_formula); 322 + $this{arglist}, $reg_formula . 323 + (($this{flagstring} eq "") ? "" : 324 + " | " . $this{flagstring} . ")") . "\n"); 359 325 360 326 print $H tabconv $hdr_data; 361 327 undef $hdr_data; ··· 407 369 $name =~ s/[,\.-]/_/g; 408 370 409 371 my $flagstring = ""; 410 - my $size = elem_size(@flags); 411 - $flagstring .= "| CCS_FL_16BIT " if $size eq "2"; 412 - $flagstring .= "| CCS_FL_32BIT " if $size eq "4"; 372 + my $bits = elem_bits(@flags); 373 + if (! defined $kernel) { 374 + $flagstring .= "| CCS_FL_16BIT " if $bits == 16; 375 + $flagstring .= "| CCS_FL_32BIT " if $bits == 32; 376 + } 413 377 $flagstring .= "| CCS_FL_FLOAT_IREAL " if grep /^float_ireal$/, @flags; 414 378 $flagstring .= "| CCS_FL_IREAL " if grep /^ireal$/, @flags; 415 379 $flagstring =~ s/^\| //; 416 380 $flagstring =~ s/ $//; 417 381 $flagstring = "($flagstring)" if $flagstring =~ /\|/; 418 382 my $base_addr = $addr; 419 - $addr = "($addr | $flagstring)" if $flagstring ne ""; 383 + $addr = "CCI_REG$bits($addr)" if defined $kernel; 384 + 385 + if ($flagstring ne "" && !@$args) { 386 + $addr = "($addr | $flagstring)"; 387 + $flagstring = ""; 388 + } 420 389 421 390 my $arglist = @$args ? "(" . (join ", ", @$args) . ")" : ""; 422 391 $hdr_data .= sprintf "#define %-62s %s\n", "CCS_R_" . (uc $name), $addr ··· 433 388 434 389 %this = ( name => $name, 435 390 addr => $addr, 391 + flagstring => $flagstring, 436 392 base_addr => $base_addr, 437 393 argparams => {}, 438 394 args => $args, 439 395 arglist => $arglist, 440 - elsize => $size, 396 + elsize => $bits / 8, 441 397 ); 442 398 443 399 if (!@$args) {