ALSA / ASoC: কীভাবে সঠিকভাবে ডিভাইস / ড্রাইভার লোড করবেন?


10

আমি এনএক্সপি এলপিসি 3250 মাইক্রোকন্ট্রোলারের জন্য এমবেডেড লিনাক্স (2.6.39.2) সিস্টেম তৈরি করতে বিলড্রুট ব্যবহার করছি।

এই মুহুর্তে, আমি ALSA / ASoC প্রস্তুত এবং চলমান করার চেষ্টা করছি, তবে মডিউলগুলি এক সাথে কাজ করার বিষয়ে আমার কিছু সমস্যা হচ্ছে। (আমি মনে করি!)

কিছু গুরুত্বপূর্ণ পটভূমি:

আমি যে বোর্ডের সাথে পরীক্ষা করছি তা হ'ল এম্বেডেড আর্টিস্টগুলি 3250 ভি 2 ডেভলপমেন্ট বোর্ড । ভি 2 ভি 1 এর থেকে পৃথক যে এটিতে এলসিডি স্ক্রিন নেই, তবে এতে একটি আই 2 এস অডিও কোডেক রয়েছে: এনএক্সপি ইউডিএ 1380। EA3250 V1 এর জন্য বোর্ড সমর্থন কার্নেলের এলপিসিএলিনাক্স সংস্করণে অন্তর্ভুক্ত রয়েছে । ফাইটেক 3250 নামে একটি পৃথক বিকাশ বোর্ড রয়েছে যা একই ইউডিএ 1380 কোডেক চিপ ধারণ করে। এলপিসিএলিনাক্স বিতরণে অডিও কোডেক চিপের পাশাপাশি ফাইটেক বোর্ডেরও সমর্থন রয়েছে। আমি যা বুঝতে পেরেছি সেগুলি থেকে, ফাইটেক 3250 বোর্ডের আই 2 সি অ্যাড্রেস 0x18 এ ইউডিএ 1380 কোডেক রয়েছে । আমার EA3250 ভি 2 বোর্ডে, অডিও কোডেক I2C ঠিকানা 0x1a এ অবস্থিত ।(আমি চিপটি চালিত হয়েছে যাচাই করেছি, এবং আমি এটি আই 2 সি-সরঞ্জাম প্যাকেজটি ব্যবহার করে যোগাযোগ করতে পারি It এটি i2cdetect এর প্রতিক্রিয়া জানায় এবং আমি চিপ থেকে রেজিস্টারগুলি সঠিকভাবে i2cget ব্যবহার করে পড়তে পারি))

উত্সটি সংশোধন করা হচ্ছে:

কোডেক চিপের ঠিকানা পরিবর্তন করতে আমার ফাইটেক 3250 ড্রাইভার ফাইলগুলি সম্পাদনা করতে হবে। আমি lpc3xxx-uda1380.c এর এই বিভাগটি সম্পাদনা করেছি :

static struct snd_soc_dai_link phy3250_uda1380_dai[] = {
       {
                  .name           = "uda1380",
                  .stream_name    = "UDA1380 Duplex",
  #if defined(CONFIG_SND_LPC32XX_USEI2S1)
                  .cpu_dai_name   = "lpc3xxx-i2s1",
  #else
                  .cpu_dai_name   = "lpc3xxx-i2s0",
  #endif
                  .codec_dai_name = "uda1380-hifi",
                  .init           = phy3250_uda1380_init,
                  .platform_name  = "lpc3xxx-audio.0",
         //EDIT// .codec_name     = "uda1380-codec.0-0018",  //EDIT//
                  .codec_name     = "uda1380-codec.0-001a",
                  .ops            = &phy3250_uda1380_ops,
          },
  };

আমি এই পরিবর্তনটি করার পরে, আমি এগিয়ে গিয়ে আবার সিস্টেমটি তৈরি করেছিলাম এবং সবকিছু ঠিক আছে। সিস্টেমে বুট করার পরে আমার মধ্যে নিম্নলিখিত মডিউলগুলি রয়েছে (স্ট্যান্ডার্ড কোর মডিউলগুলি ছাড়াও) /lib/modules/2.6.39.2/kernel/sound:

 ./soc/codecs: snd-soc-uda1380.ko          <-- ASoC codec driver
./soc/lpc3xxx: snd-soc-lpc3xxx-i2s.ko      <-- ASoC DAI
               snd-soc-lpc3xxx-uda1380.ko  <-- ASoC machine driver
               snd-soc-lpc3xxx.ko          <-- ASoC platform driver

এখন, আমি কীভাবে এই সমস্ত জিনিসকে একসাথে আবদ্ধ করব?

কেবল মডিউলগুলি সন্নিবেশ করা modprobeআসলে ডিভাইসটি ALSA / ASoC এ দেয় না। আমি সাউন্ডকার্ড সনাক্ত করতে অক্ষম। এর অর্থ কি এখন আমি 0x1auda1380-codec ঠিকানায় একটি নতুন ডিভাইস তৈরি করতে এবং এটি একটি ড্রাইভারকে আবদ্ধ করতে হবে? আমি নিম্নলিখিতগুলি করার চেষ্টা করেছি: এবং পেয়েছি: তারপরে আমি ড্রাইভারটিকে ডিভাইসে আবদ্ধ করার চেষ্টা করি: এবং পেয়েছি: আমি যা চেষ্টা করি তার জন্য এই ত্রুটিটি পাই! আমার একটি অনুভূতি রয়েছে যে আমি ডিভাইসটি সঠিকভাবে তৈরি করছি না, এবং তারপরে এটি সঠিক ড্রাইভারের সাথে কীভাবে আবদ্ধ করা যায় তা নিশ্চিত নই।
echo uda1380-codec 0x01a > /sys/bus/i2c/devices/i2c-0/new_device

i2c i2c-0: new_device: Instantiated device uda1380-codec at 0x1a

echo 0x1a > /sys/bus/i2c/drivers/uda1380-codec/bind

sh: write error: No such device

নোটা বেনি:

আমি গত রাতে এই সাথে খেলছিলাম এবং কোনওভাবে এএসওসি ঘুম থেকে উঠতে এবং কার্ডের জন্য অন্তত তদন্ত করতে সক্ষম হয়েছি। আমি বিভিন্ন বাইন্ডিং নিয়ে খেলছিলাম, আমার ধারণা। আমার পদক্ষেপগুলি মনে রাখা দেরী এবং কঠিন ছিল, তবে আমি অন্তত নিম্নলিখিত ত্রুটিটি কোনওভাবে পেতে পেরেছি:

uda1380-codec 0-001a: asoc: failed to probe CODEC uda1380-codec.0-001a: -22
asoc: failed to instantiate card LPC32XX: -22

আমি এই ত্রুটি পুনরায় তৈরি করতে অক্ষম!

সম্পাদনা:

আমি নিশ্চিত করেছি যে আমার সংশোধিত কোডটি সংকলিত হচ্ছে, তাই চালকের এখনই সঠিক ঠিকানার সাথে কথা বলা উচিত। মডিউল ম্যানুয়ালি লোড করার পরে, এর আউটপুট lsmod:

Module                      Size  Used by    Not tainted
snd_soc_lpc3xxx_uda1380     2087  0 
snd_soc_lpc3xxx             3089  0 
snd_soc_lpc3xxx_i2s         4089  1 
snd_soc_uda1380            10865  0 
snd_soc_core               51549  4 snd_soc_lpc3xxx_uda1380,snd_soc_lpc3xxx,snd_soc_lpc3xxx_i2s,snd_soc_uda1380
snd_pcm                    52098  2 snd_soc_lpc3xxx,snd_soc_core
snd_timer                  15590  1 snd_pcm
snd_page_alloc              3021  1 snd_pcm
snd                        37286  3 snd_soc_core,snd_pcm,snd_timer

এটা কি ঠিক দেখাচ্ছে?

এবং আমার ডিভাইস টেবিল:

# Audio stuff
/dev/audio      c       666     0       29      14      4       -       -       -
#/dev/audio1    c       666     0       29      14      20      -       -       -
/dev/dsp        c       666     0       29      14      3       -       -       -
#/dev/dsp1      c       666     0       29      14      19      -       -       -
#/dev/sndstat   c       666     0       29      14      6       -       -       -
/dev/mixer      c       666     0       29      14      0       -       -       -
/dev/snd        d       755     0       29      -       -       -       -       -
/dev/snd/controlC0      c       666     0       29      116     0       -       -       -
/dev/snd/pcmC0D0c       c       666     0       29      116     24      -       -       -
/dev/snd/pcmC0D0p       c       666     0       29      116     16      -       -       -
/dev/snd/seq    c       666     0       29      116     1       -       -       -
/dev/snd/timer  c       666     0       29      116     33      -       -       -

আপনার ASOC ডকুমেন্টেশনটি পড়তে হবে এবং তারপরে alsa-develতালিকায় জিজ্ঞাসা করুন (যেখানে আপনাকে বলা হবে যে ২.6.৩৯ ভয়াবহভাবে পুরানো, এবং বোর্ড বিক্রেতাকে সমর্থন করার জন্য দায়ী)।
সিএল

@CL। ধন্যবাদ, বোর্ড বিক্রেতা ইউডিএ 1380 কোডেককে এলপিসিএলিনাক্স সমর্থন করে না (আমি ইতিমধ্যে তাদের সাথে যোগাযোগ করেছি) , এ কারণেই আমি নিজের মধ্যে এটি হ্যাক করার চেষ্টা করছি।
dext0rb

আমি পোস্ট করেছি alsa-develএবং কেউ সাড়া দেয়নি। (যা আমি বলতে পারি - আমি মেল-তালিকাগুলি ঘৃণা করি, সেগুলি সবচেয়ে খারাপভাবে পড়তে পারে)) এখন আমার মেলবক্সটি ALSA কৃপায় পূর্ণ এবং এখনও আমার কোনও সহায়তা নেই। এখানে আমি নিজেই আবার যাচ্ছি ...
dext0rb

উত্তর:


3

বোর্ডের ফাইলটি সম্পাদনা করা দরকার যা প্ল্যাটফর্ম ডিভাইসগুলি সংজ্ঞায়িত করে। আমার সংশোধন করা দরকার arch/arm/mach-lpc32xx/ea3250.c:

এটি যুক্ত করুন:

/*
 * Platform Data for UDA1380 Audiocodec.
 * As there are no GPIOs for codec power & reset pins,
 * dummy GPIO numbers are used.
 */
static struct uda1380_platform_data uda1380_info = {
    .gpio_power = LPC32XX_GPIO(LPC32XX_GPO_P3_GRP,10),
    .gpio_reset = LPC32XX_GPIO(LPC32XX_GPO_P3_GRP,2),
    .dac_clk    = UDA1380_DAC_CLK_WSPLL,
};

কোডেক অন্তর্ভুক্ত করতে এটি সম্পাদনা করুন:

static struct i2c_board_info __initdata ea3250_i2c_board_info [] = {
        {   I2C_BOARD_INFO("uda1380", 0x1a),
            .platform_data = &uda1380_info,
        }, 
#if defined (CONFIG_LEDS_PCA9532)
        {
            I2C_BOARD_INFO("pca9532", I2C_PCA9532_ADDR),
            .platform_data = &ea3250_leds,
        },
#endif
#if defined (CONFIG_FB_ARMCLCD)
        {
            /* 8Kb Configuration EEPROM on display board */
            I2C_BOARD_INFO("ea_i2c_disp_cfg", LCDB_CONFIG_EEPROM_I2C_ADDR),
        },
        {
            I2C_BOARD_INFO("ea_i2c_video", LCDB_PCA9532_I2C_ADDR),
        },
#endif
#if defined (CONFIG_EEPROM_AT24)
        {
            I2C_BOARD_INFO("24c256", I2C_24LC256_ADDR),
        },
#endif
    };
#endif

এখন আমার কাছে সমস্ত ডিভাইস রয়েছে:

# cat cards
 0 [LPC32XX        ]:  - LPC32XX
                      LPC32XX
# cat devices
  2: [ 0- 0]: digital audio playback
  3: [ 0- 0]: digital audio capture
  4: [ 0]   : control
 33:        : timer

# cat pcm
00-00: UDA1380 Duplex uda1380-hifi-0 :  : playback 1 : capture 1

aplayযদিও আমি এখনও কিছু সনাক্ত করতে পারি না , তবে সম্ভবত এটি একটি ভিন্ন সমস্যা।

সম্পাদনা: হ্যাঁ, এটি একটি ভিন্ন বিষয় ছিল। দেখানো ডিভাইসগুলির সামনের cat devicesনম্বরটি আপনার / dev / snd ডিভাইস এন্ট্রিগুলিতে মাইনর ডিভাইস নম্বরটির সাথে মেলে। ALSA এর শেষ মুহুর্তে সবকিছু ঠিক আছে বলে মনে হচ্ছে তবে এলপিসি 3250 থেকে আমার কাছে কোনও আই 2 এস ডেটা নেই ...

এডিট 2: সলভড সলভড সলভড। আপনার যদি আই 2 এস ডেটা / ঘড়ি না থাকে তবে আউটপুট পিনগুলিকে আই 2 এস পেরিফেরিয়াল সংযোগ করতে আউটপুট ম্যাক্স রেজিস্টারটি সঠিকভাবে কনফিগার করা আছে তা নিশ্চিত করুন !!!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.